mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Migrations: Gitlab Add Reactions Support for Issues & MergeRequests (#12695)
* fix migrations: gitlab_test * more stable test * Get Reactions to Pulls * Reactions for Issues * Comments are still hard Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
		@@ -327,7 +327,6 @@ func (g *GitlabDownloader) GetAsset(tag string, id int64) (io.ReadCloser, error)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetIssues returns issues according start and limit
 | 
					// GetIssues returns issues according start and limit
 | 
				
			||||||
//   Note: issue label description and colors are not supported by the go-gitlab library at this time
 | 
					//   Note: issue label description and colors are not supported by the go-gitlab library at this time
 | 
				
			||||||
//   TODO: figure out how to transfer issue reactions
 | 
					 | 
				
			||||||
func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, error) {
 | 
					func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, error) {
 | 
				
			||||||
	state := "all"
 | 
						state := "all"
 | 
				
			||||||
	sort := "asc"
 | 
						sort := "asc"
 | 
				
			||||||
@@ -361,6 +360,22 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
				
			|||||||
			milestone = issue.Milestone.Title
 | 
								milestone = issue.Milestone.Title
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var reactions []*base.Reaction
 | 
				
			||||||
 | 
							var awardPage = 1
 | 
				
			||||||
 | 
							for {
 | 
				
			||||||
 | 
								awards, _, err := g.client.AwardEmoji.ListIssueAwardEmoji(g.repoID, issue.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, false, fmt.Errorf("error while listing issue awards: %v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if len(awards) < perPage {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for i := range awards {
 | 
				
			||||||
 | 
									reactions = append(reactions, g.awardToReaction(awards[i]))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								awardPage++
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		allIssues = append(allIssues, &base.Issue{
 | 
							allIssues = append(allIssues, &base.Issue{
 | 
				
			||||||
			Title:      issue.Title,
 | 
								Title:      issue.Title,
 | 
				
			||||||
			Number:     int64(issue.IID),
 | 
								Number:     int64(issue.IID),
 | 
				
			||||||
@@ -371,6 +386,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
				
			|||||||
			State:      issue.State,
 | 
								State:      issue.State,
 | 
				
			||||||
			Created:    *issue.CreatedAt,
 | 
								Created:    *issue.CreatedAt,
 | 
				
			||||||
			Labels:     labels,
 | 
								Labels:     labels,
 | 
				
			||||||
 | 
								Reactions:  reactions,
 | 
				
			||||||
			Closed:     issue.ClosedAt,
 | 
								Closed:     issue.ClosedAt,
 | 
				
			||||||
			IsLocked:   issue.DiscussionLocked,
 | 
								IsLocked:   issue.DiscussionLocked,
 | 
				
			||||||
			Updated:    *issue.UpdatedAt,
 | 
								Updated:    *issue.UpdatedAt,
 | 
				
			||||||
@@ -384,6 +400,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
 | 
				
			||||||
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, 100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -501,6 +518,22 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
 | 
				
			|||||||
			milestone = pr.Milestone.Title
 | 
								milestone = pr.Milestone.Title
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var reactions []*base.Reaction
 | 
				
			||||||
 | 
							var awardPage = 1
 | 
				
			||||||
 | 
							for {
 | 
				
			||||||
 | 
								awards, _, err := g.client.AwardEmoji.ListMergeRequestAwardEmoji(g.repoID, pr.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, fmt.Errorf("error while listing merge requests awards: %v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if len(awards) < perPage {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for i := range awards {
 | 
				
			||||||
 | 
									reactions = append(reactions, g.awardToReaction(awards[i]))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								awardPage++
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Add the PR ID to the Issue Count because PR and Issues share ID space in Gitea
 | 
							// Add the PR ID to the Issue Count because PR and Issues share ID space in Gitea
 | 
				
			||||||
		newPRNumber := g.issueCount + int64(pr.IID)
 | 
							newPRNumber := g.issueCount + int64(pr.IID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -520,6 +553,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
 | 
				
			|||||||
			MergeCommitSHA: pr.MergeCommitSHA,
 | 
								MergeCommitSHA: pr.MergeCommitSHA,
 | 
				
			||||||
			MergedTime:     mergeTime,
 | 
								MergedTime:     mergeTime,
 | 
				
			||||||
			IsLocked:       locked,
 | 
								IsLocked:       locked,
 | 
				
			||||||
 | 
								Reactions:      reactions,
 | 
				
			||||||
			Head: base.PullRequestBranch{
 | 
								Head: base.PullRequestBranch{
 | 
				
			||||||
				Ref:       pr.SourceBranch,
 | 
									Ref:       pr.SourceBranch,
 | 
				
			||||||
				SHA:       pr.SHA,
 | 
									SHA:       pr.SHA,
 | 
				
			||||||
@@ -570,3 +604,11 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return reviews, nil
 | 
						return reviews, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (g *GitlabDownloader) awardToReaction(award *gitlab.AwardEmoji) *base.Reaction {
 | 
				
			||||||
 | 
						return &base.Reaction{
 | 
				
			||||||
 | 
							UserID:   int64(award.User.ID),
 | 
				
			||||||
 | 
							UserName: award.User.Username,
 | 
				
			||||||
 | 
							Content:  award.Name,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,7 +130,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
			PosterName: "lafriks",
 | 
								PosterName: "lafriks",
 | 
				
			||||||
			State:      "closed",
 | 
								State:      "closed",
 | 
				
			||||||
			Created:    time.Date(2019, 11, 28, 8, 43, 35, 459000000, time.UTC),
 | 
								Created:    time.Date(2019, 11, 28, 8, 43, 35, 459000000, time.UTC),
 | 
				
			||||||
			Updated:    time.Date(2019, 11, 28, 8, 46, 23, 275000000, time.UTC),
 | 
								Updated:    time.Date(2019, 11, 28, 8, 46, 23, 304000000, time.UTC),
 | 
				
			||||||
			Labels: []*base.Label{
 | 
								Labels: []*base.Label{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name: "bug",
 | 
										Name: "bug",
 | 
				
			||||||
@@ -139,8 +139,18 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
					Name: "discussion",
 | 
										Name: "discussion",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Reactions: nil,
 | 
								Reactions: []*base.Reaction{
 | 
				
			||||||
			Closed:    &closed1,
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "thumbsup",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "open_mouth",
 | 
				
			||||||
 | 
									}},
 | 
				
			||||||
 | 
								Closed: &closed1,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Number:     2,
 | 
								Number:     2,
 | 
				
			||||||
@@ -157,8 +167,38 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
					Name: "duplicate",
 | 
										Name: "duplicate",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Reactions: nil,
 | 
								Reactions: []*base.Reaction{
 | 
				
			||||||
			Closed:    &closed2,
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "thumbsup",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "thumbsdown",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "laughing",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "tada",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "confused",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										UserID:   1241334,
 | 
				
			||||||
 | 
										UserName: "lafriks",
 | 
				
			||||||
 | 
										Content:  "hearts",
 | 
				
			||||||
 | 
									}},
 | 
				
			||||||
 | 
								Closed: &closed2,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}, issues)
 | 
						}, issues)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -171,7 +211,6 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
			PosterID:   1241334,
 | 
								PosterID:   1241334,
 | 
				
			||||||
			PosterName: "lafriks",
 | 
								PosterName: "lafriks",
 | 
				
			||||||
			Created:    time.Date(2019, 11, 28, 8, 44, 52, 501000000, time.UTC),
 | 
								Created:    time.Date(2019, 11, 28, 8, 44, 52, 501000000, time.UTC),
 | 
				
			||||||
			Updated:    time.Date(2019, 11, 28, 8, 44, 52, 501000000, time.UTC),
 | 
					 | 
				
			||||||
			Content:    "This is a comment",
 | 
								Content:    "This is a comment",
 | 
				
			||||||
			Reactions:  nil,
 | 
								Reactions:  nil,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -207,20 +246,29 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	assert.EqualValues(t, []*base.PullRequest{
 | 
						assert.EqualValues(t, []*base.PullRequest{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Number:     4,
 | 
								Number:         4,
 | 
				
			||||||
			Title:      "Test branch",
 | 
								OriginalNumber: 2,
 | 
				
			||||||
			Content:    "do not merge this PR",
 | 
								Title:          "Test branch",
 | 
				
			||||||
			Milestone:  "1.0.0",
 | 
								Content:        "do not merge this PR",
 | 
				
			||||||
			PosterID:   1241334,
 | 
								Milestone:      "1.0.0",
 | 
				
			||||||
			PosterName: "lafriks",
 | 
								PosterID:       1241334,
 | 
				
			||||||
			State:      "opened",
 | 
								PosterName:     "lafriks",
 | 
				
			||||||
			Created:    time.Date(2019, 11, 28, 15, 56, 54, 104000000, time.UTC),
 | 
								State:          "opened",
 | 
				
			||||||
			Updated:    time.Date(2019, 11, 28, 15, 56, 54, 104000000, time.UTC),
 | 
								Created:        time.Date(2019, 11, 28, 15, 56, 54, 104000000, time.UTC),
 | 
				
			||||||
			Labels: []*base.Label{
 | 
								Labels: []*base.Label{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name: "bug",
 | 
										Name: "bug",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
								Reactions: []*base.Reaction{{
 | 
				
			||||||
 | 
									UserID:   4575606,
 | 
				
			||||||
 | 
									UserName: "real6543",
 | 
				
			||||||
 | 
									Content:  "thumbsup",
 | 
				
			||||||
 | 
								}, {
 | 
				
			||||||
 | 
									UserID:   4575606,
 | 
				
			||||||
 | 
									UserName: "real6543",
 | 
				
			||||||
 | 
									Content:  "tada",
 | 
				
			||||||
 | 
								}},
 | 
				
			||||||
			PatchURL: "https://gitlab.com/gitea/test_repo/-/merge_requests/2.patch",
 | 
								PatchURL: "https://gitlab.com/gitea/test_repo/-/merge_requests/2.patch",
 | 
				
			||||||
			Head: base.PullRequestBranch{
 | 
								Head: base.PullRequestBranch{
 | 
				
			||||||
				Ref:       "feat/test",
 | 
									Ref:       "feat/test",
 | 
				
			||||||
@@ -244,13 +292,20 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	rvs, err := downloader.GetReviews(1)
 | 
						rvs, err := downloader.GetReviews(1)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	if assert.Len(t, prs, 2) {
 | 
						if assert.Len(t, rvs, 2) {
 | 
				
			||||||
		assert.EqualValues(t, 527793, rvs[0].ReviewerID)
 | 
							for i := range rvs {
 | 
				
			||||||
		assert.EqualValues(t, "axifive", rvs[0].ReviewerName)
 | 
								switch rvs[i].ReviewerID {
 | 
				
			||||||
		assert.EqualValues(t, "APPROVED", rvs[0].State)
 | 
								case 4102996:
 | 
				
			||||||
		assert.EqualValues(t, 4102996, rvs[1].ReviewerID)
 | 
									assert.EqualValues(t, "zeripath", rvs[i].ReviewerName)
 | 
				
			||||||
		assert.EqualValues(t, "zeripath", rvs[1].ReviewerName)
 | 
									assert.EqualValues(t, "APPROVED", rvs[i].State)
 | 
				
			||||||
		assert.EqualValues(t, "APPROVED", rvs[1].State)
 | 
								case 527793:
 | 
				
			||||||
 | 
									assert.EqualValues(t, "axifive", rvs[i].ReviewerName)
 | 
				
			||||||
 | 
									assert.EqualValues(t, "APPROVED", rvs[i].State)
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									t.Errorf("Unexpected Reviewer ID: %d", rvs[i].ReviewerID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rvs, err = downloader.GetReviews(2)
 | 
						rvs, err = downloader.GetReviews(2)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user