mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:45:25 +01: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:
		
							parent
							
								
									7af2ccd511
								
							
						
					
					
						commit
						ad4a644fb3
					
				| @ -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,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) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user