diff --git a/datasource/gitlab/card.go b/datasource/gitlab/card.go index b78f446c6c3bddbe85bf9a42593692d643b34f9e..a43db20ccead3e3b80e36d372c1b3fe8b8167069 100644 --- a/datasource/gitlab/card.go +++ b/datasource/gitlab/card.go @@ -21,17 +21,20 @@ func (ds GitLabDataSource) ListCards(board_id string) ([]*models.Card, error) { op := &gitlab.IssueListOptions{ State: "opened", } - op.Page = "1" - op.PerPage = "200" - r, err := ds.client.ListIssues(board_id, op) + op.PerPage = "100" + nextPage := "1" - if err != nil { - return nil, err - } - - for _, d := range r { - b = append(b, mapCardFromGitlab(d)) + for nextPage != "" { + op.Page = nextPage + r, next, err := ds.client.ListIssues(board_id, op) + if err != nil { + return nil, err + } + for _, d := range r { + b = append(b, mapCardFromGitlab(d)) + } + nextPage = next } return b, nil diff --git a/modules/gitlab/issue.go b/modules/gitlab/issue.go index 13990c487ebde6fe770003c164ca57df91ff343b..187ab12ff49930c1885aea8e0939d47154494e11 100644 --- a/modules/gitlab/issue.go +++ b/modules/gitlab/issue.go @@ -48,21 +48,24 @@ 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 + resp, err := g.Do(req, &ret) + if err != nil { + return nil, "", err } - return ret, nil + nextPage := resp.Header.Get("X-Next-Page") + return ret, nextPage, nil } // CreateIssue creates a new project issue.