From a499a537bde133ef27870ae355511479591f141b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Lavault?= Date: Tue, 12 Apr 2016 11:54:21 +0200 Subject: [PATCH] Paginate Gitlab issues requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maƫl Lavault --- datasource/gitlab/card.go | 12 ++++++++++-- modules/gitlab/issue.go | 10 ++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/datasource/gitlab/card.go b/datasource/gitlab/card.go index b78f446..8ca96ea 100644 --- a/datasource/gitlab/card.go +++ b/datasource/gitlab/card.go @@ -22,9 +22,9 @@ func (ds GitLabDataSource) ListCards(board_id string) ([]*models.Card, error) { State: "opened", } op.Page = "1" - op.PerPage = "200" + op.PerPage = "100" - r, err := ds.client.ListIssues(board_id, op) + r, nextPage, err := ds.client.ListIssues(board_id, op) if err != nil { return nil, err @@ -34,6 +34,14 @@ func (ds GitLabDataSource) ListCards(board_id string) ([]*models.Card, error) { b = append(b, mapCardFromGitlab(d)) } + for nextPage != "" { + op.Page = nextPage + r, nextPage, err = ds.client.ListIssues(board_id, op) + for _, d := range r { + b = append(b, mapCardFromGitlab(d)) + } + } + return b, nil } diff --git a/modules/gitlab/issue.go b/modules/gitlab/issue.go index 13990c4..a4b6a0f 100644 --- a/modules/gitlab/issue.go +++ b/modules/gitlab/issue.go @@ -48,21 +48,23 @@ type IssueListOptions struct { // takes pagination parameters page and per_page to restrict the list of issues. // // GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#list-issues -func (g *GitlabContext) ListIssues(project_id string, o *IssueListOptions) ([]*Issue, error) { +func (g *GitlabContext) ListIssues(project_id string, o *IssueListOptions) ([]*Issue, string, error,) { path := getUrl([]string{"projects", url.QueryEscape(project_id), "issues"}) u, err := addOptions(path, o) if err != nil { - return nil, err + return nil, "", err } req, _ := http.NewRequest("GET", u, nil) var ret []*Issue if _, err := g.Do(req, &ret); err != nil { - return nil, err + return nil, "", err } - return ret, nil + nextPage := req.Header.Get("X-Next-Page") + + return ret, nextPage, nil } // CreateIssue creates a new project issue. -- GitLab