GitLab migration: Sanitize response for reaction list (#25054)
This commit is contained in:
parent
b6d8d695da
commit
af3deb0b30
|
@ -413,7 +413,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
|
||||||
milestone = issue.Milestone.Title
|
milestone = issue.Milestone.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
var reactions []*base.Reaction
|
var reactions []*gitlab.AwardEmoji
|
||||||
awardPage := 1
|
awardPage := 1
|
||||||
for {
|
for {
|
||||||
awards, _, err := g.client.AwardEmoji.ListIssueAwardEmoji(g.repoID, issue.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
|
awards, _, err := g.client.AwardEmoji.ListIssueAwardEmoji(g.repoID, issue.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
|
||||||
|
@ -421,9 +421,7 @@ func (g *GitlabDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, er
|
||||||
return nil, false, fmt.Errorf("error while listing issue awards: %w", err)
|
return nil, false, fmt.Errorf("error while listing issue awards: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range awards {
|
reactions = append(reactions, awards...)
|
||||||
reactions = append(reactions, g.awardToReaction(awards[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(awards) < perPage {
|
if len(awards) < perPage {
|
||||||
break
|
break
|
||||||
|
@ -442,7 +440,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,
|
Reactions: g.awardsToReactions(reactions),
|
||||||
Closed: issue.ClosedAt,
|
Closed: issue.ClosedAt,
|
||||||
IsLocked: issue.DiscussionLocked,
|
IsLocked: issue.DiscussionLocked,
|
||||||
Updated: *issue.UpdatedAt,
|
Updated: *issue.UpdatedAt,
|
||||||
|
@ -577,7 +575,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
|
||||||
milestone = pr.Milestone.Title
|
milestone = pr.Milestone.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
var reactions []*base.Reaction
|
var reactions []*gitlab.AwardEmoji
|
||||||
awardPage := 1
|
awardPage := 1
|
||||||
for {
|
for {
|
||||||
awards, _, err := g.client.AwardEmoji.ListMergeRequestAwardEmoji(g.repoID, pr.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
|
awards, _, err := g.client.AwardEmoji.ListMergeRequestAwardEmoji(g.repoID, pr.IID, &gitlab.ListAwardEmojiOptions{Page: awardPage, PerPage: perPage}, gitlab.WithContext(g.ctx))
|
||||||
|
@ -585,9 +583,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque
|
||||||
return nil, false, fmt.Errorf("error while listing merge requests awards: %w", err)
|
return nil, false, fmt.Errorf("error while listing merge requests awards: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range awards {
|
reactions = append(reactions, awards...)
|
||||||
reactions = append(reactions, g.awardToReaction(awards[i]))
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(awards) < perPage {
|
if len(awards) < perPage {
|
||||||
break
|
break
|
||||||
|
@ -614,7 +610,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,
|
Reactions: g.awardsToReactions(reactions),
|
||||||
Head: base.PullRequestBranch{
|
Head: base.PullRequestBranch{
|
||||||
Ref: pr.SourceBranch,
|
Ref: pr.SourceBranch,
|
||||||
SHA: pr.SHA,
|
SHA: pr.SHA,
|
||||||
|
@ -675,10 +671,19 @@ func (g *GitlabDownloader) GetReviews(reviewable base.Reviewable) ([]*base.Revie
|
||||||
return reviews, nil
|
return reviews, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitlabDownloader) awardToReaction(award *gitlab.AwardEmoji) *base.Reaction {
|
func (g *GitlabDownloader) awardsToReactions(awards []*gitlab.AwardEmoji) []*base.Reaction {
|
||||||
return &base.Reaction{
|
result := make([]*base.Reaction, 0, len(awards))
|
||||||
|
uniqCheck := make(map[string]struct{})
|
||||||
|
for _, award := range awards {
|
||||||
|
uid := fmt.Sprintf("%s%d", award.Name, award.User.ID)
|
||||||
|
if _, ok := uniqCheck[uid]; !ok {
|
||||||
|
result = append(result, &base.Reaction{
|
||||||
UserID: int64(award.User.ID),
|
UserID: int64(award.User.ID),
|
||||||
UserName: award.User.Username,
|
UserName: award.User.Username,
|
||||||
Content: award.Name,
|
Content: award.Name,
|
||||||
|
})
|
||||||
|
uniqCheck[uid] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/json"
|
||||||
base "code.gitea.io/gitea/modules/migration"
|
base "code.gitea.io/gitea/modules/migration"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -469,3 +470,49 @@ func TestGitlabGetReviews(t *testing.T) {
|
||||||
assertReviewsEqual(t, []*base.Review{&review}, rvs)
|
assertReviewsEqual(t, []*base.Review{&review}, rvs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAwardsToReactions(t *testing.T) {
|
||||||
|
downloader := &GitlabDownloader{}
|
||||||
|
// yes gitlab can have duplicated reactions (https://gitlab.com/jaywink/socialhome/-/issues/24)
|
||||||
|
testResponse := `
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "thumbsup",
|
||||||
|
"user": {
|
||||||
|
"id": 1241334,
|
||||||
|
"username": "lafriks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thumbsup",
|
||||||
|
"user": {
|
||||||
|
"id": 1241334,
|
||||||
|
"username": "lafriks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "thumbsup",
|
||||||
|
"user": {
|
||||||
|
"id": 4575606,
|
||||||
|
"username": "real6543"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
`
|
||||||
|
var awards []*gitlab.AwardEmoji
|
||||||
|
assert.NoError(t, json.Unmarshal([]byte(testResponse), &awards))
|
||||||
|
|
||||||
|
reactions := downloader.awardsToReactions(awards)
|
||||||
|
assert.EqualValues(t, []*base.Reaction{
|
||||||
|
{
|
||||||
|
UserName: "lafriks",
|
||||||
|
UserID: 1241334,
|
||||||
|
Content: "thumbsup",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
UserName: "real6543",
|
||||||
|
UserID: 4575606,
|
||||||
|
Content: "thumbsup",
|
||||||
|
},
|
||||||
|
}, reactions)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue