|
|
|
@ -272,71 +272,65 @@ func convertGithubReactions(reactions *github.Reactions) *base.Reactions { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetIssues returns issues according start and limit
|
|
|
|
|
func (g *GithubDownloaderV3) GetIssues(start, limit int) ([]*base.Issue, error) { |
|
|
|
|
var perPage = 100 |
|
|
|
|
func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool, error) { |
|
|
|
|
opt := &github.IssueListByRepoOptions{ |
|
|
|
|
Sort: "created", |
|
|
|
|
Direction: "asc", |
|
|
|
|
State: "all", |
|
|
|
|
ListOptions: github.ListOptions{ |
|
|
|
|
PerPage: perPage, |
|
|
|
|
Page: page, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
var allIssues = make([]*base.Issue, 0, limit) |
|
|
|
|
for { |
|
|
|
|
issues, resp, err := g.client.Issues.ListByRepo(g.ctx, g.repoOwner, g.repoName, opt) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, fmt.Errorf("error while listing repos: %v", err) |
|
|
|
|
} |
|
|
|
|
for _, issue := range issues { |
|
|
|
|
if issue.IsPullRequest() { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
var body string |
|
|
|
|
if issue.Body != nil { |
|
|
|
|
body = *issue.Body |
|
|
|
|
} |
|
|
|
|
var milestone string |
|
|
|
|
if issue.Milestone != nil { |
|
|
|
|
milestone = *issue.Milestone.Title |
|
|
|
|
} |
|
|
|
|
var labels = make([]*base.Label, 0, len(issue.Labels)) |
|
|
|
|
for _, l := range issue.Labels { |
|
|
|
|
labels = append(labels, convertGithubLabel(&l)) |
|
|
|
|
} |
|
|
|
|
var reactions *base.Reactions |
|
|
|
|
if issue.Reactions != nil { |
|
|
|
|
reactions = convertGithubReactions(issue.Reactions) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var email string |
|
|
|
|
if issue.User.Email != nil { |
|
|
|
|
email = *issue.User.Email |
|
|
|
|
} |
|
|
|
|
allIssues = append(allIssues, &base.Issue{ |
|
|
|
|
Title: *issue.Title, |
|
|
|
|
Number: int64(*issue.Number), |
|
|
|
|
PosterName: *issue.User.Login, |
|
|
|
|
PosterEmail: email, |
|
|
|
|
Content: body, |
|
|
|
|
Milestone: milestone, |
|
|
|
|
State: *issue.State, |
|
|
|
|
Created: *issue.CreatedAt, |
|
|
|
|
Labels: labels, |
|
|
|
|
Reactions: reactions, |
|
|
|
|
Closed: issue.ClosedAt, |
|
|
|
|
IsLocked: *issue.Locked, |
|
|
|
|
}) |
|
|
|
|
if len(allIssues) >= limit { |
|
|
|
|
return allIssues, nil |
|
|
|
|
} |
|
|
|
|
var allIssues = make([]*base.Issue, 0, perPage) |
|
|
|
|
|
|
|
|
|
issues, _, err := g.client.Issues.ListByRepo(g.ctx, g.repoOwner, g.repoName, opt) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, false, fmt.Errorf("error while listing repos: %v", err) |
|
|
|
|
} |
|
|
|
|
for _, issue := range issues { |
|
|
|
|
if issue.IsPullRequest() { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if resp.NextPage == 0 { |
|
|
|
|
break |
|
|
|
|
var body string |
|
|
|
|
if issue.Body != nil { |
|
|
|
|
body = *issue.Body |
|
|
|
|
} |
|
|
|
|
opt.Page = resp.NextPage |
|
|
|
|
var milestone string |
|
|
|
|
if issue.Milestone != nil { |
|
|
|
|
milestone = *issue.Milestone.Title |
|
|
|
|
} |
|
|
|
|
var labels = make([]*base.Label, 0, len(issue.Labels)) |
|
|
|
|
for _, l := range issue.Labels { |
|
|
|
|
labels = append(labels, convertGithubLabel(&l)) |
|
|
|
|
} |
|
|
|
|
var reactions *base.Reactions |
|
|
|
|
if issue.Reactions != nil { |
|
|
|
|
reactions = convertGithubReactions(issue.Reactions) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var email string |
|
|
|
|
if issue.User.Email != nil { |
|
|
|
|
email = *issue.User.Email |
|
|
|
|
} |
|
|
|
|
allIssues = append(allIssues, &base.Issue{ |
|
|
|
|
Title: *issue.Title, |
|
|
|
|
Number: int64(*issue.Number), |
|
|
|
|
PosterName: *issue.User.Login, |
|
|
|
|
PosterEmail: email, |
|
|
|
|
Content: body, |
|
|
|
|
Milestone: milestone, |
|
|
|
|
State: *issue.State, |
|
|
|
|
Created: *issue.CreatedAt, |
|
|
|
|
Labels: labels, |
|
|
|
|
Reactions: reactions, |
|
|
|
|
Closed: issue.ClosedAt, |
|
|
|
|
IsLocked: *issue.Locked, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
return allIssues, nil |
|
|
|
|
|
|
|
|
|
return allIssues, len(issues) < perPage, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetComments returns comments according issueNumber
|
|
|
|
@ -379,97 +373,91 @@ func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, er |
|
|
|
|
return allComments, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetPullRequests returns pull requests according start and limit
|
|
|
|
|
func (g *GithubDownloaderV3) GetPullRequests(start, limit int) ([]*base.PullRequest, error) { |
|
|
|
|
// GetPullRequests returns pull requests according page and perPage
|
|
|
|
|
func (g *GithubDownloaderV3) GetPullRequests(page, perPage int) ([]*base.PullRequest, error) { |
|
|
|
|
opt := &github.PullRequestListOptions{ |
|
|
|
|
Sort: "created", |
|
|
|
|
Direction: "asc", |
|
|
|
|
State: "all", |
|
|
|
|
ListOptions: github.ListOptions{ |
|
|
|
|
PerPage: 100, |
|
|
|
|
PerPage: perPage, |
|
|
|
|
Page: page, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
var allPRs = make([]*base.PullRequest, 0, 100) |
|
|
|
|
for { |
|
|
|
|
prs, resp, err := g.client.PullRequests.List(g.ctx, g.repoOwner, g.repoName, opt) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, fmt.Errorf("error while listing repos: %v", err) |
|
|
|
|
} |
|
|
|
|
for _, pr := range prs { |
|
|
|
|
var body string |
|
|
|
|
if pr.Body != nil { |
|
|
|
|
body = *pr.Body |
|
|
|
|
} |
|
|
|
|
var milestone string |
|
|
|
|
if pr.Milestone != nil { |
|
|
|
|
milestone = *pr.Milestone.Title |
|
|
|
|
} |
|
|
|
|
var labels = make([]*base.Label, 0, len(pr.Labels)) |
|
|
|
|
for _, l := range pr.Labels { |
|
|
|
|
labels = append(labels, convertGithubLabel(l)) |
|
|
|
|
} |
|
|
|
|
var allPRs = make([]*base.PullRequest, 0, perPage) |
|
|
|
|
|
|
|
|
|
// FIXME: This API missing reactions, we may need another extra request to get reactions
|
|
|
|
|
prs, _, err := g.client.PullRequests.List(g.ctx, g.repoOwner, g.repoName, opt) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, fmt.Errorf("error while listing repos: %v", err) |
|
|
|
|
} |
|
|
|
|
for _, pr := range prs { |
|
|
|
|
var body string |
|
|
|
|
if pr.Body != nil { |
|
|
|
|
body = *pr.Body |
|
|
|
|
} |
|
|
|
|
var milestone string |
|
|
|
|
if pr.Milestone != nil { |
|
|
|
|
milestone = *pr.Milestone.Title |
|
|
|
|
} |
|
|
|
|
var labels = make([]*base.Label, 0, len(pr.Labels)) |
|
|
|
|
for _, l := range pr.Labels { |
|
|
|
|
labels = append(labels, convertGithubLabel(l)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var email string |
|
|
|
|
if pr.User.Email != nil { |
|
|
|
|
email = *pr.User.Email |
|
|
|
|
} |
|
|
|
|
var merged bool |
|
|
|
|
// pr.Merged is not valid, so use MergedAt to test if it's merged
|
|
|
|
|
if pr.MergedAt != nil { |
|
|
|
|
merged = true |
|
|
|
|
} |
|
|
|
|
// FIXME: This API missing reactions, we may need another extra request to get reactions
|
|
|
|
|
|
|
|
|
|
var headRepoName string |
|
|
|
|
var cloneURL string |
|
|
|
|
if pr.Head.Repo != nil { |
|
|
|
|
headRepoName = *pr.Head.Repo.Name |
|
|
|
|
cloneURL = *pr.Head.Repo.CloneURL |
|
|
|
|
} |
|
|
|
|
var mergeCommitSHA string |
|
|
|
|
if pr.MergeCommitSHA != nil { |
|
|
|
|
mergeCommitSHA = *pr.MergeCommitSHA |
|
|
|
|
} |
|
|
|
|
var email string |
|
|
|
|
if pr.User.Email != nil { |
|
|
|
|
email = *pr.User.Email |
|
|
|
|
} |
|
|
|
|
var merged bool |
|
|
|
|
// pr.Merged is not valid, so use MergedAt to test if it's merged
|
|
|
|
|
if pr.MergedAt != nil { |
|
|
|
|
merged = true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
allPRs = append(allPRs, &base.PullRequest{ |
|
|
|
|
Title: *pr.Title, |
|
|
|
|
Number: int64(*pr.Number), |
|
|
|
|
PosterName: *pr.User.Login, |
|
|
|
|
PosterEmail: email, |
|
|
|
|
Content: body, |
|
|
|
|
Milestone: milestone, |
|
|
|
|
State: *pr.State, |
|
|
|
|
Created: *pr.CreatedAt, |
|
|
|
|
Closed: pr.ClosedAt, |
|
|
|
|
Labels: labels, |
|
|
|
|
Merged: merged, |
|
|
|
|
MergeCommitSHA: mergeCommitSHA, |
|
|
|
|
MergedTime: pr.MergedAt, |
|
|
|
|
IsLocked: pr.ActiveLockReason != nil, |
|
|
|
|
Head: base.PullRequestBranch{ |
|
|
|
|
Ref: *pr.Head.Ref, |
|
|
|
|
SHA: *pr.Head.SHA, |
|
|
|
|
RepoName: headRepoName, |
|
|
|
|
OwnerName: *pr.Head.User.Login, |
|
|
|
|
CloneURL: cloneURL, |
|
|
|
|
}, |
|
|
|
|
Base: base.PullRequestBranch{ |
|
|
|
|
Ref: *pr.Base.Ref, |
|
|
|
|
SHA: *pr.Base.SHA, |
|
|
|
|
RepoName: *pr.Base.Repo.Name, |
|
|
|
|
OwnerName: *pr.Base.User.Login, |
|
|
|
|
}, |
|
|
|
|
PatchURL: *pr.PatchURL, |
|
|
|
|
}) |
|
|
|
|
if len(allPRs) >= limit { |
|
|
|
|
return allPRs, nil |
|
|
|
|
} |
|
|
|
|
var headRepoName string |
|
|
|
|
var cloneURL string |
|
|
|
|
if pr.Head.Repo != nil { |
|
|
|
|
headRepoName = *pr.Head.Repo.Name |
|
|
|
|
cloneURL = *pr.Head.Repo.CloneURL |
|
|
|
|
} |
|
|
|
|
if resp.NextPage == 0 { |
|
|
|
|
break |
|
|
|
|
var mergeCommitSHA string |
|
|
|
|
if pr.MergeCommitSHA != nil { |
|
|
|
|
mergeCommitSHA = *pr.MergeCommitSHA |
|
|
|
|
} |
|
|
|
|
opt.Page = resp.NextPage |
|
|
|
|
|
|
|
|
|
allPRs = append(allPRs, &base.PullRequest{ |
|
|
|
|
Title: *pr.Title, |
|
|
|
|
Number: int64(*pr.Number), |
|
|
|
|
PosterName: *pr.User.Login, |
|
|
|
|
PosterEmail: email, |
|
|
|
|
Content: body, |
|
|
|
|
Milestone: milestone, |
|
|
|
|
State: *pr.State, |
|
|
|
|
Created: *pr.CreatedAt, |
|
|
|
|
Closed: pr.ClosedAt, |
|
|
|
|
Labels: labels, |
|
|
|
|
Merged: merged, |
|
|
|
|
MergeCommitSHA: mergeCommitSHA, |
|
|
|
|
MergedTime: pr.MergedAt, |
|
|
|
|
IsLocked: pr.ActiveLockReason != nil, |
|
|
|
|
Head: base.PullRequestBranch{ |
|
|
|
|
Ref: *pr.Head.Ref, |
|
|
|
|
SHA: *pr.Head.SHA, |
|
|
|
|
RepoName: headRepoName, |
|
|
|
|
OwnerName: *pr.Head.User.Login, |
|
|
|
|
CloneURL: cloneURL, |
|
|
|
|
}, |
|
|
|
|
Base: base.PullRequestBranch{ |
|
|
|
|
Ref: *pr.Base.Ref, |
|
|
|
|
SHA: *pr.Base.SHA, |
|
|
|
|
RepoName: *pr.Base.Repo.Name, |
|
|
|
|
OwnerName: *pr.Base.User.Login, |
|
|
|
|
}, |
|
|
|
|
PatchURL: *pr.PatchURL, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return allPRs, nil |
|
|
|
|
} |
|
|
|
|