Handle pagination in commit listing.

This commit is contained in:
Mihai Parparita 2014-09-21 21:58:36 -07:00
parent f81e06b9de
commit 63fe7b619c

View file

@ -193,24 +193,36 @@ func (digest *Digest) fetch(githubClient *github.Client) error {
for _, intervalDigest := range digest.IntervalDigests { for _, intervalDigest := range digest.IntervalDigests {
for _, repo := range intervalDigest.repos { for _, repo := range intervalDigest.repos {
go func(intervalDigest *IntervalDigest, repo *Repo) { go func(intervalDigest *IntervalDigest, repo *Repo) {
commits, _, err := githubClient.Repositories.ListCommits( commits := make([]github.RepositoryCommit, 0)
page := 1
for {
pageCommits, response, err := githubClient.Repositories.ListCommits(
*repo.Owner.Login, *repo.Owner.Login,
*repo.Name, *repo.Name,
&github.CommitsListOptions{ &github.CommitsListOptions{
ListOptions: github.ListOptions{PerPage: 100}, ListOptions: github.ListOptions{
Page: page,
PerPage: 100,
},
Author: *digest.User.Login, Author: *digest.User.Login,
Since: intervalDigest.StartTime.UTC(), Since: intervalDigest.StartTime.UTC(),
Until: intervalDigest.EndTime.UTC(), Until: intervalDigest.EndTime.UTC(),
}) })
if err != nil { if err != nil {
ch <- &RepoDigestResponse{nil, nil, err} ch <- &RepoDigestResponse{nil, nil, err}
} else { return
}
commits = append(commits, pageCommits...)
if response.NextPage == 0 {
break
}
page = response.NextPage
}
digestCommits := make([]DigestCommit, len(commits)) digestCommits := make([]DigestCommit, len(commits))
for i := range commits { for i := range commits {
digestCommits[len(commits)-i-1] = newDigestCommit(&commits[i], repo, digest.TimezoneLocation) digestCommits[len(commits)-i-1] = newDigestCommit(&commits[i], repo, digest.TimezoneLocation)
} }
ch <- &RepoDigestResponse{intervalDigest, &RepoDigest{repo, digestCommits}, nil} ch <- &RepoDigestResponse{intervalDigest, &RepoDigest{repo, digestCommits}, nil}
}
}(intervalDigest, repo) }(intervalDigest, repo)
fetchCount++ fetchCount++
} }