mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 01:34:27 +00: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
 | 
			
		||||
//   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) {
 | 
			
		||||
	state := "all"
 | 
			
		||||
	sort := "asc"
 | 
			
		||||
@@ -361,6 +360,22 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
			
		||||
			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{
 | 
			
		||||
			Title:      issue.Title,
 | 
			
		||||
			Number:     int64(issue.IID),
 | 
			
		||||
@@ -371,6 +386,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
			
		||||
			State:      issue.State,
 | 
			
		||||
			Created:    *issue.CreatedAt,
 | 
			
		||||
			Labels:     labels,
 | 
			
		||||
			Reactions:  reactions,
 | 
			
		||||
			Closed:     issue.ClosedAt,
 | 
			
		||||
			IsLocked:   issue.DiscussionLocked,
 | 
			
		||||
			Updated:    *issue.UpdatedAt,
 | 
			
		||||
@@ -384,6 +400,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetComments returns comments according issueNumber
 | 
			
		||||
// TODO: figure out how to transfer comment reactions
 | 
			
		||||
func (g *GitlabDownloader) GetComments(issueNumber int64) ([]*base.Comment, error) {
 | 
			
		||||
	var allComments = make([]*base.Comment, 0, 100)
 | 
			
		||||
 | 
			
		||||
@@ -501,6 +518,22 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
 | 
			
		||||
			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
 | 
			
		||||
		newPRNumber := g.issueCount + int64(pr.IID)
 | 
			
		||||
 | 
			
		||||
@@ -520,6 +553,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
 | 
			
		||||
			MergeCommitSHA: pr.MergeCommitSHA,
 | 
			
		||||
			MergedTime:     mergeTime,
 | 
			
		||||
			IsLocked:       locked,
 | 
			
		||||
			Reactions:      reactions,
 | 
			
		||||
			Head: base.PullRequestBranch{
 | 
			
		||||
				Ref:       pr.SourceBranch,
 | 
			
		||||
				SHA:       pr.SHA,
 | 
			
		||||
@@ -570,3 +604,11 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review,
 | 
			
		||||
 | 
			
		||||
	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",
 | 
			
		||||
			State:      "closed",
 | 
			
		||||
			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{
 | 
			
		||||
				{
 | 
			
		||||
					Name: "bug",
 | 
			
		||||
@@ -139,7 +139,17 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
					Name: "discussion",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			Reactions: nil,
 | 
			
		||||
			Reactions: []*base.Reaction{
 | 
			
		||||
				{
 | 
			
		||||
					UserID:   1241334,
 | 
			
		||||
					UserName: "lafriks",
 | 
			
		||||
					Content:  "thumbsup",
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					UserID:   1241334,
 | 
			
		||||
					UserName: "lafriks",
 | 
			
		||||
					Content:  "open_mouth",
 | 
			
		||||
				}},
 | 
			
		||||
			Closed: &closed1,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -157,7 +167,37 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
					Name: "duplicate",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			Reactions: nil,
 | 
			
		||||
			Reactions: []*base.Reaction{
 | 
			
		||||
				{
 | 
			
		||||
					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)
 | 
			
		||||
@@ -171,7 +211,6 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
			PosterID:   1241334,
 | 
			
		||||
			PosterName: "lafriks",
 | 
			
		||||
			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",
 | 
			
		||||
			Reactions:  nil,
 | 
			
		||||
		},
 | 
			
		||||
@@ -208,6 +247,7 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
	assert.EqualValues(t, []*base.PullRequest{
 | 
			
		||||
		{
 | 
			
		||||
			Number:         4,
 | 
			
		||||
			OriginalNumber: 2,
 | 
			
		||||
			Title:          "Test branch",
 | 
			
		||||
			Content:        "do not merge this PR",
 | 
			
		||||
			Milestone:      "1.0.0",
 | 
			
		||||
@@ -215,12 +255,20 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
			PosterName:     "lafriks",
 | 
			
		||||
			State:          "opened",
 | 
			
		||||
			Created:        time.Date(2019, 11, 28, 15, 56, 54, 104000000, time.UTC),
 | 
			
		||||
			Updated:    time.Date(2019, 11, 28, 15, 56, 54, 104000000, time.UTC),
 | 
			
		||||
			Labels: []*base.Label{
 | 
			
		||||
				{
 | 
			
		||||
					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",
 | 
			
		||||
			Head: base.PullRequestBranch{
 | 
			
		||||
				Ref:       "feat/test",
 | 
			
		||||
@@ -244,13 +292,20 @@ func TestGitlabDownloadRepo(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	rvs, err := downloader.GetReviews(1)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	if assert.Len(t, prs, 2) {
 | 
			
		||||
		assert.EqualValues(t, 527793, rvs[0].ReviewerID)
 | 
			
		||||
		assert.EqualValues(t, "axifive", rvs[0].ReviewerName)
 | 
			
		||||
		assert.EqualValues(t, "APPROVED", rvs[0].State)
 | 
			
		||||
		assert.EqualValues(t, 4102996, rvs[1].ReviewerID)
 | 
			
		||||
		assert.EqualValues(t, "zeripath", rvs[1].ReviewerName)
 | 
			
		||||
		assert.EqualValues(t, "APPROVED", rvs[1].State)
 | 
			
		||||
	if assert.Len(t, rvs, 2) {
 | 
			
		||||
		for i := range rvs {
 | 
			
		||||
			switch rvs[i].ReviewerID {
 | 
			
		||||
			case 4102996:
 | 
			
		||||
				assert.EqualValues(t, "zeripath", rvs[i].ReviewerName)
 | 
			
		||||
				assert.EqualValues(t, "APPROVED", rvs[i].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)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user