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)
*repo.Owner.Login, page := 1
*repo.Name, for {
&github.CommitsListOptions{ pageCommits, response, err := githubClient.Repositories.ListCommits(
ListOptions: github.ListOptions{PerPage: 100}, *repo.Owner.Login,
Author: *digest.User.Login, *repo.Name,
Since: intervalDigest.StartTime.UTC(), &github.CommitsListOptions{
Until: intervalDigest.EndTime.UTC(), ListOptions: github.ListOptions{
}) Page: page,
if err != nil { PerPage: 100,
ch <- &RepoDigestResponse{nil, nil, err} },
} else { Author: *digest.User.Login,
digestCommits := make([]DigestCommit, len(commits)) Since: intervalDigest.StartTime.UTC(),
for i := range commits { Until: intervalDigest.EndTime.UTC(),
digestCommits[len(commits)-i-1] = newDigestCommit(&commits[i], repo, digest.TimezoneLocation) })
if err != nil {
ch <- &RepoDigestResponse{nil, nil, err}
return
} }
ch <- &RepoDigestResponse{intervalDigest, &RepoDigest{repo, digestCommits}, nil} commits = append(commits, pageCommits...)
if response.NextPage == 0 {
break
}
page = response.NextPage
} }
digestCommits := make([]DigestCommit, len(commits))
for i := range commits {
digestCommits[len(commits)-i-1] = newDigestCommit(&commits[i], repo, digest.TimezoneLocation)
}
ch <- &RepoDigestResponse{intervalDigest, &RepoDigest{repo, digestCommits}, nil}
}(intervalDigest, repo) }(intervalDigest, repo)
fetchCount++ fetchCount++
} }