mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Fix bug isEnd detection on getIssues/getPullRequests (#13299)
This commit is contained in:
		@@ -65,23 +65,25 @@ func (f *GithubDownloaderV3Factory) GitServiceType() structs.GitServiceType {
 | 
				
			|||||||
// GithubDownloaderV3 implements a Downloader interface to get repository informations
 | 
					// GithubDownloaderV3 implements a Downloader interface to get repository informations
 | 
				
			||||||
// from github via APIv3
 | 
					// from github via APIv3
 | 
				
			||||||
type GithubDownloaderV3 struct {
 | 
					type GithubDownloaderV3 struct {
 | 
				
			||||||
	ctx       context.Context
 | 
						ctx        context.Context
 | 
				
			||||||
	client    *github.Client
 | 
						client     *github.Client
 | 
				
			||||||
	repoOwner string
 | 
						repoOwner  string
 | 
				
			||||||
	repoName  string
 | 
						repoName   string
 | 
				
			||||||
	userName  string
 | 
						userName   string
 | 
				
			||||||
	password  string
 | 
						password   string
 | 
				
			||||||
	rate      *github.Rate
 | 
						rate       *github.Rate
 | 
				
			||||||
 | 
						maxPerPage int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewGithubDownloaderV3 creates a github Downloader via github v3 API
 | 
					// NewGithubDownloaderV3 creates a github Downloader via github v3 API
 | 
				
			||||||
func NewGithubDownloaderV3(ctx context.Context, baseURL, userName, password, token, repoOwner, repoName string) *GithubDownloaderV3 {
 | 
					func NewGithubDownloaderV3(ctx context.Context, baseURL, userName, password, token, repoOwner, repoName string) *GithubDownloaderV3 {
 | 
				
			||||||
	var downloader = GithubDownloaderV3{
 | 
						var downloader = GithubDownloaderV3{
 | 
				
			||||||
		userName:  userName,
 | 
							userName:   userName,
 | 
				
			||||||
		password:  password,
 | 
							password:   password,
 | 
				
			||||||
		ctx:       ctx,
 | 
							ctx:        ctx,
 | 
				
			||||||
		repoOwner: repoOwner,
 | 
							repoOwner:  repoOwner,
 | 
				
			||||||
		repoName:  repoName,
 | 
							repoName:   repoName,
 | 
				
			||||||
 | 
							maxPerPage: 100,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	client := &http.Client{
 | 
						client := &http.Client{
 | 
				
			||||||
@@ -177,7 +179,7 @@ func (g *GithubDownloaderV3) GetTopics() ([]string, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetMilestones returns milestones
 | 
					// GetMilestones returns milestones
 | 
				
			||||||
func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) {
 | 
					func (g *GithubDownloaderV3) GetMilestones() ([]*base.Milestone, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var milestones = make([]*base.Milestone, 0, perPage)
 | 
						var milestones = make([]*base.Milestone, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
		g.sleep()
 | 
							g.sleep()
 | 
				
			||||||
@@ -233,7 +235,7 @@ func convertGithubLabel(label *github.Label) *base.Label {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetLabels returns labels
 | 
					// GetLabels returns labels
 | 
				
			||||||
func (g *GithubDownloaderV3) GetLabels() ([]*base.Label, error) {
 | 
					func (g *GithubDownloaderV3) GetLabels() ([]*base.Label, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var labels = make([]*base.Label, 0, perPage)
 | 
						var labels = make([]*base.Label, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
		g.sleep()
 | 
							g.sleep()
 | 
				
			||||||
@@ -304,7 +306,7 @@ func (g *GithubDownloaderV3) convertGithubRelease(rel *github.RepositoryRelease)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetReleases returns releases
 | 
					// GetReleases returns releases
 | 
				
			||||||
func (g *GithubDownloaderV3) GetReleases() ([]*base.Release, error) {
 | 
					func (g *GithubDownloaderV3) GetReleases() ([]*base.Release, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var releases = make([]*base.Release, 0, perPage)
 | 
						var releases = make([]*base.Release, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
		g.sleep()
 | 
							g.sleep()
 | 
				
			||||||
@@ -342,6 +344,9 @@ func (g *GithubDownloaderV3) GetAsset(_ string, _, id int64) (io.ReadCloser, err
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetIssues returns issues according start and limit
 | 
					// GetIssues returns issues according start and limit
 | 
				
			||||||
func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool, error) {
 | 
					func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool, error) {
 | 
				
			||||||
 | 
						if perPage > g.maxPerPage {
 | 
				
			||||||
 | 
							perPage = g.maxPerPage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	opt := &github.IssueListByRepoOptions{
 | 
						opt := &github.IssueListByRepoOptions{
 | 
				
			||||||
		Sort:      "created",
 | 
							Sort:      "created",
 | 
				
			||||||
		Direction: "asc",
 | 
							Direction: "asc",
 | 
				
			||||||
@@ -429,7 +434,7 @@ func (g *GithubDownloaderV3) GetIssues(page, perPage int) ([]*base.Issue, bool,
 | 
				
			|||||||
// GetComments returns comments according issueNumber
 | 
					// GetComments returns comments according issueNumber
 | 
				
			||||||
func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, error) {
 | 
					func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, error) {
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
		allComments = make([]*base.Comment, 0, 100)
 | 
							allComments = make([]*base.Comment, 0, g.maxPerPage)
 | 
				
			||||||
		created     = "created"
 | 
							created     = "created"
 | 
				
			||||||
		asc         = "asc"
 | 
							asc         = "asc"
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
@@ -437,7 +442,7 @@ func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, er
 | 
				
			|||||||
		Sort:      &created,
 | 
							Sort:      &created,
 | 
				
			||||||
		Direction: &asc,
 | 
							Direction: &asc,
 | 
				
			||||||
		ListOptions: github.ListOptions{
 | 
							ListOptions: github.ListOptions{
 | 
				
			||||||
			PerPage: 100,
 | 
								PerPage: g.maxPerPage,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
@@ -459,7 +464,7 @@ func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, er
 | 
				
			|||||||
				g.sleep()
 | 
									g.sleep()
 | 
				
			||||||
				res, resp, err := g.client.Reactions.ListIssueCommentReactions(g.ctx, g.repoOwner, g.repoName, comment.GetID(), &github.ListOptions{
 | 
									res, resp, err := g.client.Reactions.ListIssueCommentReactions(g.ctx, g.repoOwner, g.repoName, comment.GetID(), &github.ListOptions{
 | 
				
			||||||
					Page:    i,
 | 
										Page:    i,
 | 
				
			||||||
					PerPage: 100,
 | 
										PerPage: g.maxPerPage,
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return nil, err
 | 
										return nil, err
 | 
				
			||||||
@@ -497,6 +502,9 @@ func (g *GithubDownloaderV3) GetComments(issueNumber int64) ([]*base.Comment, er
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetPullRequests returns pull requests according page and perPage
 | 
					// GetPullRequests returns pull requests according page and perPage
 | 
				
			||||||
func (g *GithubDownloaderV3) GetPullRequests(page, perPage int) ([]*base.PullRequest, bool, error) {
 | 
					func (g *GithubDownloaderV3) GetPullRequests(page, perPage int) ([]*base.PullRequest, bool, error) {
 | 
				
			||||||
 | 
						if perPage > g.maxPerPage {
 | 
				
			||||||
 | 
							perPage = g.maxPerPage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	opt := &github.PullRequestListOptions{
 | 
						opt := &github.PullRequestListOptions{
 | 
				
			||||||
		Sort:      "created",
 | 
							Sort:      "created",
 | 
				
			||||||
		Direction: "asc",
 | 
							Direction: "asc",
 | 
				
			||||||
@@ -650,7 +658,7 @@ func (g *GithubDownloaderV3) convertGithubReviewComments(cs []*github.PullReques
 | 
				
			|||||||
			g.sleep()
 | 
								g.sleep()
 | 
				
			||||||
			res, resp, err := g.client.Reactions.ListPullRequestCommentReactions(g.ctx, g.repoOwner, g.repoName, c.GetID(), &github.ListOptions{
 | 
								res, resp, err := g.client.Reactions.ListPullRequestCommentReactions(g.ctx, g.repoOwner, g.repoName, c.GetID(), &github.ListOptions{
 | 
				
			||||||
				Page:    i,
 | 
									Page:    i,
 | 
				
			||||||
				PerPage: 100,
 | 
									PerPage: g.maxPerPage,
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
@@ -687,9 +695,9 @@ func (g *GithubDownloaderV3) convertGithubReviewComments(cs []*github.PullReques
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetReviews returns pull requests review
 | 
					// GetReviews returns pull requests review
 | 
				
			||||||
func (g *GithubDownloaderV3) GetReviews(pullRequestNumber int64) ([]*base.Review, error) {
 | 
					func (g *GithubDownloaderV3) GetReviews(pullRequestNumber int64) ([]*base.Review, error) {
 | 
				
			||||||
	var allReviews = make([]*base.Review, 0, 100)
 | 
						var allReviews = make([]*base.Review, 0, g.maxPerPage)
 | 
				
			||||||
	opt := &github.ListOptions{
 | 
						opt := &github.ListOptions{
 | 
				
			||||||
		PerPage: 100,
 | 
							PerPage: g.maxPerPage,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		g.sleep()
 | 
							g.sleep()
 | 
				
			||||||
@@ -703,7 +711,7 @@ func (g *GithubDownloaderV3) GetReviews(pullRequestNumber int64) ([]*base.Review
 | 
				
			|||||||
			r.IssueIndex = pullRequestNumber
 | 
								r.IssueIndex = pullRequestNumber
 | 
				
			||||||
			// retrieve all review comments
 | 
								// retrieve all review comments
 | 
				
			||||||
			opt2 := &github.ListOptions{
 | 
								opt2 := &github.ListOptions{
 | 
				
			||||||
				PerPage: 100,
 | 
									PerPage: g.maxPerPage,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			for {
 | 
								for {
 | 
				
			||||||
				g.sleep()
 | 
									g.sleep()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -68,6 +68,7 @@ type GitlabDownloader struct {
 | 
				
			|||||||
	repoName        string
 | 
						repoName        string
 | 
				
			||||||
	issueCount      int64
 | 
						issueCount      int64
 | 
				
			||||||
	fetchPRcomments bool
 | 
						fetchPRcomments bool
 | 
				
			||||||
 | 
						maxPerPage      int
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewGitlabDownloader creates a gitlab Downloader via gitlab API
 | 
					// NewGitlabDownloader creates a gitlab Downloader via gitlab API
 | 
				
			||||||
@@ -99,10 +100,11 @@ func NewGitlabDownloader(ctx context.Context, baseURL, repoPath, username, passw
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &GitlabDownloader{
 | 
						return &GitlabDownloader{
 | 
				
			||||||
		ctx:      ctx,
 | 
							ctx:        ctx,
 | 
				
			||||||
		client:   gitlabClient,
 | 
							client:     gitlabClient,
 | 
				
			||||||
		repoID:   gr.ID,
 | 
							repoID:     gr.ID,
 | 
				
			||||||
		repoName: gr.Name,
 | 
							repoName:   gr.Name,
 | 
				
			||||||
 | 
							maxPerPage: 100,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,7 +161,7 @@ func (g *GitlabDownloader) GetTopics() ([]string, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetMilestones returns milestones
 | 
					// GetMilestones returns milestones
 | 
				
			||||||
func (g *GitlabDownloader) GetMilestones() ([]*base.Milestone, error) {
 | 
					func (g *GitlabDownloader) GetMilestones() ([]*base.Milestone, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var state = "all"
 | 
						var state = "all"
 | 
				
			||||||
	var milestones = make([]*base.Milestone, 0, perPage)
 | 
						var milestones = make([]*base.Milestone, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
@@ -230,7 +232,7 @@ func (g *GitlabDownloader) normalizeColor(val string) string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetLabels returns labels
 | 
					// GetLabels returns labels
 | 
				
			||||||
func (g *GitlabDownloader) GetLabels() ([]*base.Label, error) {
 | 
					func (g *GitlabDownloader) GetLabels() ([]*base.Label, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var labels = make([]*base.Label, 0, perPage)
 | 
						var labels = make([]*base.Label, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
		ls, _, err := g.client.Labels.ListLabels(g.repoID, &gitlab.ListLabelsOptions{ListOptions: gitlab.ListOptions{
 | 
							ls, _, err := g.client.Labels.ListLabels(g.repoID, &gitlab.ListLabelsOptions{ListOptions: gitlab.ListOptions{
 | 
				
			||||||
@@ -281,7 +283,7 @@ func (g *GitlabDownloader) convertGitlabRelease(rel *gitlab.Release) *base.Relea
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetReleases returns releases
 | 
					// GetReleases returns releases
 | 
				
			||||||
func (g *GitlabDownloader) GetReleases() ([]*base.Release, error) {
 | 
					func (g *GitlabDownloader) GetReleases() ([]*base.Release, error) {
 | 
				
			||||||
	var perPage = 100
 | 
						var perPage = g.maxPerPage
 | 
				
			||||||
	var releases = make([]*base.Release, 0, perPage)
 | 
						var releases = make([]*base.Release, 0, perPage)
 | 
				
			||||||
	for i := 1; ; i++ {
 | 
						for i := 1; ; i++ {
 | 
				
			||||||
		ls, _, err := g.client.Releases.ListReleases(g.repoID, &gitlab.ListReleasesOptions{
 | 
							ls, _, err := g.client.Releases.ListReleases(g.repoID, &gitlab.ListReleasesOptions{
 | 
				
			||||||
@@ -330,6 +332,10 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
				
			|||||||
	state := "all"
 | 
						state := "all"
 | 
				
			||||||
	sort := "asc"
 | 
						sort := "asc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if perPage > g.maxPerPage {
 | 
				
			||||||
 | 
							perPage = g.maxPerPage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opt := &gitlab.ListProjectIssuesOptions{
 | 
						opt := &gitlab.ListProjectIssuesOptions{
 | 
				
			||||||
		State: &state,
 | 
							State: &state,
 | 
				
			||||||
		Sort:  &sort,
 | 
							Sort:  &sort,
 | 
				
			||||||
@@ -401,7 +407,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
				
			|||||||
// GetComments returns comments according issueNumber
 | 
					// GetComments returns comments according issueNumber
 | 
				
			||||||
// TODO: figure out how to transfer comment reactions
 | 
					// TODO: figure out how to transfer comment reactions
 | 
				
			||||||
func (g *GitlabDownloader) GetComments(issueNumber int64) ([]*base.Comment, error) {
 | 
					func (g *GitlabDownloader) GetComments(issueNumber int64) ([]*base.Comment, error) {
 | 
				
			||||||
	var allComments = make([]*base.Comment, 0, 100)
 | 
						var allComments = make([]*base.Comment, 0, g.maxPerPage)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var page = 1
 | 
						var page = 1
 | 
				
			||||||
	var realIssueNumber int64
 | 
						var realIssueNumber int64
 | 
				
			||||||
@@ -415,14 +421,14 @@ func (g *GitlabDownloader) GetComments(issueNumber int64) ([]*base.Comment, erro
 | 
				
			|||||||
			realIssueNumber = issueNumber
 | 
								realIssueNumber = issueNumber
 | 
				
			||||||
			comments, resp, err = g.client.Discussions.ListIssueDiscussions(g.repoID, int(realIssueNumber), &gitlab.ListIssueDiscussionsOptions{
 | 
								comments, resp, err = g.client.Discussions.ListIssueDiscussions(g.repoID, int(realIssueNumber), &gitlab.ListIssueDiscussionsOptions{
 | 
				
			||||||
				Page:    page,
 | 
									Page:    page,
 | 
				
			||||||
				PerPage: 100,
 | 
									PerPage: g.maxPerPage,
 | 
				
			||||||
			}, nil, gitlab.WithContext(g.ctx))
 | 
								}, nil, gitlab.WithContext(g.ctx))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			// If this is a PR, we need to figure out the Gitlab/original PR ID to be passed below
 | 
								// If this is a PR, we need to figure out the Gitlab/original PR ID to be passed below
 | 
				
			||||||
			realIssueNumber = issueNumber - g.issueCount
 | 
								realIssueNumber = issueNumber - g.issueCount
 | 
				
			||||||
			comments, resp, err = g.client.Discussions.ListMergeRequestDiscussions(g.repoID, int(realIssueNumber), &gitlab.ListMergeRequestDiscussionsOptions{
 | 
								comments, resp, err = g.client.Discussions.ListMergeRequestDiscussions(g.repoID, int(realIssueNumber), &gitlab.ListMergeRequestDiscussionsOptions{
 | 
				
			||||||
				Page:    page,
 | 
									Page:    page,
 | 
				
			||||||
				PerPage: 100,
 | 
									PerPage: g.maxPerPage,
 | 
				
			||||||
			}, nil, gitlab.WithContext(g.ctx))
 | 
								}, nil, gitlab.WithContext(g.ctx))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -465,6 +471,10 @@ func (g *GitlabDownloader) GetComments(issueNumber int64) ([]*base.Comment, erro
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetPullRequests returns pull requests according page and perPage
 | 
					// GetPullRequests returns pull requests according page and perPage
 | 
				
			||||||
func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullRequest, bool, error) {
 | 
					func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullRequest, bool, error) {
 | 
				
			||||||
 | 
						if perPage > g.maxPerPage {
 | 
				
			||||||
 | 
							perPage = g.maxPerPage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opt := &gitlab.ListProjectMergeRequestsOptions{
 | 
						opt := &gitlab.ListProjectMergeRequestsOptions{
 | 
				
			||||||
		ListOptions: gitlab.ListOptions{
 | 
							ListOptions: gitlab.ListOptions{
 | 
				
			||||||
			PerPage: perPage,
 | 
								PerPage: perPage,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user