From c39e2746df6bbfd953fbb93c6ff9298abdc96602 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 19 Apr 2020 23:02:59 +0200 Subject: [PATCH 1/7] suggestions from golang --- modules/migrations/gitlab.go | 6 +++--- modules/migrations/migrate.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index 02891d504d65a..7bd47289e673e 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -32,7 +32,7 @@ func init() { type GitlabDownloaderFactory struct { } -// Match returns ture if the migration remote URL matched this downloader factory +// Match returns true if the migration remote URL matched this downloader factory func (f *GitlabDownloaderFactory) Match(opts base.MigrateOptions) (bool, error) { var matched bool @@ -492,11 +492,11 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque } // Add the PR ID to the Issue Count because PR and Issues share ID space in Gitea - newPRnumber := g.issueCount + int64(pr.IID) + newPRNumber := g.issueCount + int64(pr.IID) allPRs = append(allPRs, &base.PullRequest{ Title: pr.Title, - Number: int64(newPRnumber), + Number: newPRNumber, PosterName: pr.Author.Username, PosterID: int64(pr.Author.ID), Content: pr.Description, diff --git a/modules/migrations/migrate.go b/modules/migrations/migrate.go index 3b3e318f69718..80e116ec49307 100644 --- a/modules/migrations/migrate.go +++ b/modules/migrations/migrate.go @@ -86,7 +86,7 @@ func MigrateRepository(ctx context.Context, doer *models.User, ownerName string, return uploader.repo, nil } -// migrateRepository will download informations and upload to Uploader, this is a simple +// migrateRepository will download information's and upload to Uploader, this is a simple // process for small repository. For a big repository, save all the data to disk // before upload is better func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts base.MigrateOptions) error { From b59966578a1fb4887c0b6b85f05ede1ba3821fca Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 00:04:15 +0200 Subject: [PATCH 2/7] working GetReviews on gitlab side --- modules/migrations/base/pullrequest.go | 1 + modules/migrations/gitlab.go | 28 +++++++++++++++++++++++++- modules/migrations/migrate.go | 14 ++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/modules/migrations/base/pullrequest.go b/modules/migrations/base/pullrequest.go index 3a1e0f25bd3ea..964512e1377e9 100644 --- a/modules/migrations/base/pullrequest.go +++ b/modules/migrations/base/pullrequest.go @@ -13,6 +13,7 @@ import ( // PullRequest defines a standard pull request information type PullRequest struct { Number int64 + OriginalNumber int64 Title string PosterName string PosterID int64 diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index 7bd47289e673e..607f3aa04a911 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -497,6 +497,7 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque allPRs = append(allPRs, &base.PullRequest{ Title: pr.Title, Number: newPRNumber, + OriginalNumber: int64(pr.IID), PosterName: pr.Author.Username, PosterID: int64(pr.Author.ID), Content: pr.Description, @@ -532,5 +533,30 @@ func (g *GitlabDownloader) GetPullRequests(page, perPage int) ([]*base.PullReque // GetReviews returns pull requests review func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review, error) { - return nil, nil + state, _, err := g.client.MergeRequestApprovals.GetApprovalState(g.repoID, int(pullRequestNumber)) + if err != nil { + return nil, err + } + + //GitLab only has Approvals witch similar to gitea's approve review's + approvers := make(map[int]*gitlab.BasicUser) + for i := range state.Rules { + for _, u := range state.Rules[i].ApprovedBy { + approvers[u.ID] = u + } + } + + var reviews = make([]*base.Review, 0, len(approvers)) + for k, v := range approvers { + reviews = append(reviews, &base.Review{ + ReviewerID: int64(k), + ReviewerName: v.Username, + // GitLab API dont return creation date + CreatedAt: time.Now(), + // All we get are approvals + State: base.ReviewStateApproved, + }) + } + + return reviews, nil } diff --git a/modules/migrations/migrate.go b/modules/migrations/migrate.go index 80e116ec49307..190d35eeefe55 100644 --- a/modules/migrations/migrate.go +++ b/modules/migrations/migrate.go @@ -277,7 +277,19 @@ func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts // migrate reviews var allReviews = make([]*base.Review, 0, reviewBatchSize) for _, pr := range prs { - reviews, err := downloader.GetReviews(pr.Number) + number := pr.Number + + // on gitlab migrations pull number change + if pr.OriginalNumber > 0 { + number = pr.OriginalNumber + } + + reviews, err := downloader.GetReviews(number) + if pr.OriginalNumber > 0 { + for i := range reviews { + reviews[i].IssueIndex = pr.Number + } + } if err != nil { return err } From eeaa84ab6ba57d828939c066e18c530277c5bf66 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 00:24:11 +0200 Subject: [PATCH 3/7] reformat test --- modules/migrations/gitlab_test.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/migrations/gitlab_test.go b/modules/migrations/gitlab_test.go index 8525d7e9ce83d..e9d2a99e01d16 100644 --- a/modules/migrations/gitlab_test.go +++ b/modules/migrations/gitlab_test.go @@ -110,7 +110,6 @@ func TestGitlabDownloadRepo(t *testing.T) { }, }, releases[len(releases)-1:]) - // downloader.GetIssues() issues, isEnd, err := downloader.GetIssues(1, 2) assert.NoError(t, err) assert.EqualValues(t, 2, len(issues)) @@ -162,7 +161,6 @@ func TestGitlabDownloadRepo(t *testing.T) { }, }, issues) - // downloader.GetComments() comments, err := downloader.GetComments(2) assert.NoError(t, err) assert.EqualValues(t, 4, len(comments)) @@ -202,10 +200,9 @@ func TestGitlabDownloadRepo(t *testing.T) { }, }, comments[:4]) - // downloader.GetPullRequests() prs, err := downloader.GetPullRequests(1, 1) assert.NoError(t, err) - assert.EqualValues(t, 1, len(prs)) + assert.Len(t, prs, 1) assert.EqualValues(t, []*base.PullRequest{ { From 1ca489deac9e5876853aeb30a51a8b0fe9c4a266 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 00:24:20 +0200 Subject: [PATCH 4/7] Extend TEST --- modules/migrations/gitlab_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/modules/migrations/gitlab_test.go b/modules/migrations/gitlab_test.go index e9d2a99e01d16..003da5bbdfd10 100644 --- a/modules/migrations/gitlab_test.go +++ b/modules/migrations/gitlab_test.go @@ -240,4 +240,23 @@ func TestGitlabDownloadRepo(t *testing.T) { MergeCommitSHA: "", }, }, prs) + + 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) + } + rvs, err = downloader.GetReviews(2) + assert.NoError(t, err) + if assert.Len(t, prs, 1) { + assert.EqualValues(t, 4575606, rvs[0].ReviewerID) + assert.EqualValues(t, "real6543", rvs[0].ReviewerName) + assert.EqualValues(t, "APPROVED", rvs[0].State) + } + } From 3e16f7873fd2bf4b9ba67f11a9a9925abc18f28b Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 00:29:05 +0200 Subject: [PATCH 5/7] fix nil insert --- models/review.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/models/review.go b/models/review.go index 7f23777c3e173..bbd4983fc26a7 100644 --- a/models/review.go +++ b/models/review.go @@ -457,8 +457,10 @@ func InsertReviews(reviews []*Review) error { c.ReviewID = review.ID } - if _, err := sess.NoAutoTime().Insert(review.Comments); err != nil { - return err + if len(review.Comments) > 0 { + if _, err := sess.NoAutoTime().Insert(review.Comments); err != nil { + return err + } } } From 426f422f55773c659c5d76a9778dc0b0bd71007b Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 00:53:39 +0200 Subject: [PATCH 6/7] speed optimize --- modules/migrations/gitlab.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index 607f3aa04a911..a34cb1685f246 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -539,18 +539,18 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review, } //GitLab only has Approvals witch similar to gitea's approve review's - approvers := make(map[int]*gitlab.BasicUser) + approvers := make(map[int]string) for i := range state.Rules { - for _, u := range state.Rules[i].ApprovedBy { - approvers[u.ID] = u + for u := range state.Rules[i].ApprovedBy { + approvers[state.Rules[i].ApprovedBy[u].ID] = state.Rules[i].ApprovedBy[u].Username } } var reviews = make([]*base.Review, 0, len(approvers)) - for k, v := range approvers { + for id, name := range approvers { reviews = append(reviews, &base.Review{ - ReviewerID: int64(k), - ReviewerName: v.Username, + ReviewerID: int64(id), + ReviewerName: name, // GitLab API dont return creation date CreatedAt: time.Now(), // All we get are approvals From 68f5aa7a5dad5cabf3e634b2677c97b4dfd19992 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 20 Apr 2020 05:03:45 +0200 Subject: [PATCH 7/7] typo's Co-Authored-By: zeripath --- modules/migrations/gitlab.go | 4 ++-- modules/migrations/migrate.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index a34cb1685f246..8e1c7d0a833d4 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -538,7 +538,7 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review, return nil, err } - //GitLab only has Approvals witch similar to gitea's approve review's + // GitLab's Approvals are equivalent to Gitea's approve reviews approvers := make(map[int]string) for i := range state.Rules { for u := range state.Rules[i].ApprovedBy { @@ -551,7 +551,7 @@ func (g *GitlabDownloader) GetReviews(pullRequestNumber int64) ([]*base.Review, reviews = append(reviews, &base.Review{ ReviewerID: int64(id), ReviewerName: name, - // GitLab API dont return creation date + // GitLab API doesn't return a creation date CreatedAt: time.Now(), // All we get are approvals State: base.ReviewStateApproved, diff --git a/modules/migrations/migrate.go b/modules/migrations/migrate.go index 190d35eeefe55..c970ba6920883 100644 --- a/modules/migrations/migrate.go +++ b/modules/migrations/migrate.go @@ -86,7 +86,7 @@ func MigrateRepository(ctx context.Context, doer *models.User, ownerName string, return uploader.repo, nil } -// migrateRepository will download information's and upload to Uploader, this is a simple +// migrateRepository will download information and then upload it to Uploader, this is a simple // process for small repository. For a big repository, save all the data to disk // before upload is better func migrateRepository(downloader base.Downloader, uploader base.Uploader, opts base.MigrateOptions) error {