summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-09-03 09:35:17 +0200
committerGitHub <noreply@github.com>2020-09-03 10:35:17 +0300
commitad4a644fb37e640aa0192129669f46bb3eea2cfb (patch)
tree957119435f38815e41bdd987d2d679047039c68a
parent7af2ccd5115caf8889ba20b61881c44694c82cb1 (diff)
downloadgitea-ad4a644fb37e640aa0192129669f46bb3eea2cfb.tar.gz
gitea-ad4a644fb37e640aa0192129669f46bb3eea2cfb.zip
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>
-rw-r--r--modules/migrations/gitlab.go44
-rw-r--r--modules/migrations/gitlab_test.go99
2 files changed, 120 insertions, 23 deletions
diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go
index c03ce89c60..3cdcef3afa 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 1862d67cc1..065a9a6590 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)