From cc643284de106a609b4ac03ed2a7f615ab6d312a Mon Sep 17 00:00:00 2001 From: singuliere <35190819+singuliere@users.noreply.github.com> Date: Sun, 6 Mar 2022 20:00:41 +0100 Subject: [PATCH] Add Index to comment for migrations and mirroring (#18806) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comments have an id (see Gitea[0], GitLab[1], GitHub[2], etc.), and the comment migration format must represent it during migrations so that it can be used during mirroring or incremental migrations. [0] https://try.gitea.io/api/swagger#/issue/issueGetComment [1] https://docs.gitlab.com/ee/api/discussions.html#get-single-issue-discussion-item [2] https://docs.github.com/en/rest/reference/issues#get-an-issue-comment Signed-off-by: Loïc Dachary Co-authored-by: Loïc Dachary --- integrations/dump_restore_test.go | 4 +++- modules/migration/comment.go | 3 ++- services/migrations/codebase.go | 8 +++++++- services/migrations/gitea_downloader.go | 1 + services/migrations/github.go | 2 ++ services/migrations/gitlab.go | 2 ++ services/migrations/gogs.go | 1 + services/migrations/onedev.go | 2 ++ 8 files changed, 20 insertions(+), 3 deletions(-) diff --git a/integrations/dump_restore_test.go b/integrations/dump_restore_test.go index 3b07bfeed..3723334ea 100644 --- a/integrations/dump_restore_test.go +++ b/integrations/dump_restore_test.go @@ -178,7 +178,9 @@ func (c *compareDump) assertEquals(repoBefore, repoAfter *repo_model.Repository) assert.GreaterOrEqual(c.t, len(issues), 1) for _, issue := range issues { filename := filepath.Join("comments", fmt.Sprintf("%d.yml", issue.Number)) - comments, ok := c.assertEqual(filename, []base.Comment{}, compareFields{}).([]*base.Comment) + comments, ok := c.assertEqual(filename, []base.Comment{}, compareFields{ + "Index": {ignore: true}, + }).([]*base.Comment) assert.True(c.t, ok) for _, comment := range comments { assert.EqualValues(c.t, issue.Number, comment.IssueIndex) diff --git a/modules/migration/comment.go b/modules/migration/comment.go index 36277129d..f364ffc93 100644 --- a/modules/migration/comment.go +++ b/modules/migration/comment.go @@ -9,7 +9,8 @@ import "time" // Comment is a standard comment information type Comment struct { - IssueIndex int64 `yaml:"issue_index"` + IssueIndex int64 `yaml:"issue_index"` + Index int64 PosterID int64 `yaml:"poster_id"` PosterName string `yaml:"poster_name"` PosterEmail string `yaml:"poster_email"` diff --git a/services/migrations/codebase.go b/services/migrations/codebase.go index 13e9327c3..be0b5d400 100644 --- a/services/migrations/codebase.go +++ b/services/migrations/codebase.go @@ -371,6 +371,7 @@ func (d *CodebaseDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, poster := d.tryGetUser(note.UserID.Value) comments = append(comments, &base.Comment{ IssueIndex: issue.TicketID.Value, + Index: note.ID.Value, PosterID: poster.ID, PosterName: poster.Name, PosterEmail: poster.Email, @@ -481,7 +482,11 @@ func (d *CodebaseDownloader) GetPullRequests(page, perPage int) ([]*base.PullReq Type string `xml:"type,attr"` Comment []struct { Content string `xml:"content"` - UserID struct { + ID struct { + Value int64 `xml:",chardata"` + Type string `xml:"type,attr"` + } `xml:"id"` + UserID struct { Value int64 `xml:",chardata"` Type string `xml:"type,attr"` } `xml:"user-id"` @@ -528,6 +533,7 @@ func (d *CodebaseDownloader) GetPullRequests(page, perPage int) ([]*base.PullReq poster := d.tryGetUser(comment.UserID.Value) comments = append(comments, &base.Comment{ IssueIndex: number, + Index: comment.ID.Value, PosterID: poster.ID, PosterName: poster.Name, PosterEmail: poster.Email, diff --git a/services/migrations/gitea_downloader.go b/services/migrations/gitea_downloader.go index a712b65a2..be3c6c120 100644 --- a/services/migrations/gitea_downloader.go +++ b/services/migrations/gitea_downloader.go @@ -473,6 +473,7 @@ func (g *GiteaDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Comm allComments = append(allComments, &base.Comment{ IssueIndex: opts.Context.LocalID(), + Index: comment.ID, PosterID: comment.Poster.ID, PosterName: comment.Poster.UserName, PosterEmail: comment.Poster.Email, diff --git a/services/migrations/github.go b/services/migrations/github.go index a946177c9..f86ba9439 100644 --- a/services/migrations/github.go +++ b/services/migrations/github.go @@ -532,6 +532,7 @@ func (g *GithubDownloaderV3) getComments(issueContext base.IssueContext) ([]*bas allComments = append(allComments, &base.Comment{ IssueIndex: issueContext.LocalID(), + Index: comment.GetID(), PosterID: comment.GetUser().GetID(), PosterName: comment.GetUser().GetLogin(), PosterEmail: comment.GetUser().GetEmail(), @@ -607,6 +608,7 @@ func (g *GithubDownloaderV3) GetAllComments(page, perPage int) ([]*base.Comment, issueIndex, _ := strconv.ParseInt((*comment.IssueURL)[idx+1:], 10, 64) allComments = append(allComments, &base.Comment{ IssueIndex: issueIndex, + Index: comment.GetID(), PosterID: comment.GetUser().GetID(), PosterName: comment.GetUser().GetLogin(), PosterEmail: comment.GetUser().GetEmail(), diff --git a/services/migrations/gitlab.go b/services/migrations/gitlab.go index 97ebc4dd8..c05d081e9 100644 --- a/services/migrations/gitlab.go +++ b/services/migrations/gitlab.go @@ -485,6 +485,7 @@ func (g *GitlabDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com for _, note := range comment.Notes { allComments = append(allComments, &base.Comment{ IssueIndex: context.LocalID(), + Index: int64(note.ID), PosterID: int64(note.Author.ID), PosterName: note.Author.Username, PosterEmail: note.Author.Email, @@ -496,6 +497,7 @@ func (g *GitlabDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com c := comment.Notes[0] allComments = append(allComments, &base.Comment{ IssueIndex: context.LocalID(), + Index: int64(c.ID), PosterID: int64(c.Author.ID), PosterName: c.Author.Username, PosterEmail: c.Author.Email, diff --git a/services/migrations/gogs.go b/services/migrations/gogs.go index 9280427cd..0ef39484b 100644 --- a/services/migrations/gogs.go +++ b/services/migrations/gogs.go @@ -236,6 +236,7 @@ func (g *GogsDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Comme } allComments = append(allComments, &base.Comment{ IssueIndex: opts.Context.LocalID(), + Index: comment.ID, PosterID: comment.Poster.ID, PosterName: comment.Poster.Login, PosterEmail: comment.Poster.Email, diff --git a/services/migrations/onedev.go b/services/migrations/onedev.go index c8253e894..d27cbbed4 100644 --- a/services/migrations/onedev.go +++ b/services/migrations/onedev.go @@ -379,6 +379,7 @@ func (d *OneDevDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com } rawComments := make([]struct { + ID int64 `json:"id"` Date time.Time `json:"date"` UserID int64 `json:"userId"` Content string `json:"content"` @@ -429,6 +430,7 @@ func (d *OneDevDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com poster := d.tryGetUser(comment.UserID) comments = append(comments, &base.Comment{ IssueIndex: context.LocalID(), + Index: comment.ID, PosterID: poster.ID, PosterName: poster.Name, PosterEmail: poster.Email,