diff --git a/datasource/gitlab/card.go b/datasource/gitlab/card.go index b78f446c6c3bddbe85bf9a42593692d643b34f9e..8ca96eafd020e71ed2b4013423e28b520c3ee799 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 13990c487ebde6fe770003c164ca57df91ff343b..a4b6a0fe8877aa5d23c07a293691e813aefb3495 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.