From ad4a644fb37e640aa0192129669f46bb3eea2cfb Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 3 Sep 2020 09:35:17 +0200 Subject: [PATCH] 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 --- modules/migrations/gitlab.go | 44 +++++++++++++- modules/migrations/gitlab_test.go | 99 ++++++++++++++++++++++++------- 2 files changed, 120 insertions(+), 23 deletions(-) diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index c03ce89c6..3cdcef3af 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -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, + } +} diff --git a/modules/migrations/gitlab_test.go b/modules/migrations/gitlab_test.go index 1862d67cc..065a9a659 100644 --- a/modules/migrations/gitlab_test.go +++ b/modules/migrations/gitlab_test.go @@ -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,8 +139,18 @@ func TestGitlabDownloadRepo(t *testing.T) { Name: "discussion", }, }, - Reactions: nil, - Closed: &closed1, + Reactions: []*base.Reaction{ + { + UserID: 1241334, + UserName: "lafriks", + Content: "thumbsup", + }, + { + UserID: 1241334, + UserName: "lafriks", + Content: "open_mouth", + }}, + Closed: &closed1, }, { Number: 2, @@ -157,8 +167,38 @@ func TestGitlabDownloadRepo(t *testing.T) { Name: "duplicate", }, }, - Reactions: nil, - Closed: &closed2, + 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, }, @@ -207,20 +246,29 @@ func TestGitlabDownloadRepo(t *testing.T) { assert.EqualValues(t, []*base.PullRequest{ { - Number: 4, - Title: "Test branch", - Content: "do not merge this PR", - Milestone: "1.0.0", - PosterID: 1241334, - 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), + Number: 4, + OriginalNumber: 2, + Title: "Test branch", + Content: "do not merge this PR", + Milestone: "1.0.0", + PosterID: 1241334, + PosterName: "lafriks", + State: "opened", + Created: 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)