mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add Index to comment for migrations and mirroring (#18806)
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 <loic@dachary.org> Co-authored-by: Loïc Dachary <loic@dachary.org>
This commit is contained in:
		@@ -178,7 +178,9 @@ func (c *compareDump) assertEquals(repoBefore, repoAfter *repo_model.Repository)
 | 
				
			|||||||
	assert.GreaterOrEqual(c.t, len(issues), 1)
 | 
						assert.GreaterOrEqual(c.t, len(issues), 1)
 | 
				
			||||||
	for _, issue := range issues {
 | 
						for _, issue := range issues {
 | 
				
			||||||
		filename := filepath.Join("comments", fmt.Sprintf("%d.yml", issue.Number))
 | 
							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)
 | 
							assert.True(c.t, ok)
 | 
				
			||||||
		for _, comment := range comments {
 | 
							for _, comment := range comments {
 | 
				
			||||||
			assert.EqualValues(c.t, issue.Number, comment.IssueIndex)
 | 
								assert.EqualValues(c.t, issue.Number, comment.IssueIndex)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ import "time"
 | 
				
			|||||||
// Comment is a standard comment information
 | 
					// Comment is a standard comment information
 | 
				
			||||||
type Comment struct {
 | 
					type Comment struct {
 | 
				
			||||||
	IssueIndex  int64 `yaml:"issue_index"`
 | 
						IssueIndex  int64 `yaml:"issue_index"`
 | 
				
			||||||
 | 
						Index       int64
 | 
				
			||||||
	PosterID    int64  `yaml:"poster_id"`
 | 
						PosterID    int64  `yaml:"poster_id"`
 | 
				
			||||||
	PosterName  string `yaml:"poster_name"`
 | 
						PosterName  string `yaml:"poster_name"`
 | 
				
			||||||
	PosterEmail string `yaml:"poster_email"`
 | 
						PosterEmail string `yaml:"poster_email"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -371,6 +371,7 @@ func (d *CodebaseDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool,
 | 
				
			|||||||
			poster := d.tryGetUser(note.UserID.Value)
 | 
								poster := d.tryGetUser(note.UserID.Value)
 | 
				
			||||||
			comments = append(comments, &base.Comment{
 | 
								comments = append(comments, &base.Comment{
 | 
				
			||||||
				IssueIndex:  issue.TicketID.Value,
 | 
									IssueIndex:  issue.TicketID.Value,
 | 
				
			||||||
 | 
									Index:       note.ID.Value,
 | 
				
			||||||
				PosterID:    poster.ID,
 | 
									PosterID:    poster.ID,
 | 
				
			||||||
				PosterName:  poster.Name,
 | 
									PosterName:  poster.Name,
 | 
				
			||||||
				PosterEmail: poster.Email,
 | 
									PosterEmail: poster.Email,
 | 
				
			||||||
@@ -481,6 +482,10 @@ func (d *CodebaseDownloader) GetPullRequests(page, perPage int) ([]*base.PullReq
 | 
				
			|||||||
				Type    string `xml:"type,attr"`
 | 
									Type    string `xml:"type,attr"`
 | 
				
			||||||
				Comment []struct {
 | 
									Comment []struct {
 | 
				
			||||||
					Content string `xml:"content"`
 | 
										Content string `xml:"content"`
 | 
				
			||||||
 | 
										ID      struct {
 | 
				
			||||||
 | 
											Value int64  `xml:",chardata"`
 | 
				
			||||||
 | 
											Type  string `xml:"type,attr"`
 | 
				
			||||||
 | 
										} `xml:"id"`
 | 
				
			||||||
					UserID struct {
 | 
										UserID struct {
 | 
				
			||||||
						Value int64  `xml:",chardata"`
 | 
											Value int64  `xml:",chardata"`
 | 
				
			||||||
						Type  string `xml:"type,attr"`
 | 
											Type  string `xml:"type,attr"`
 | 
				
			||||||
@@ -528,6 +533,7 @@ func (d *CodebaseDownloader) GetPullRequests(page, perPage int) ([]*base.PullReq
 | 
				
			|||||||
			poster := d.tryGetUser(comment.UserID.Value)
 | 
								poster := d.tryGetUser(comment.UserID.Value)
 | 
				
			||||||
			comments = append(comments, &base.Comment{
 | 
								comments = append(comments, &base.Comment{
 | 
				
			||||||
				IssueIndex:  number,
 | 
									IssueIndex:  number,
 | 
				
			||||||
 | 
									Index:       comment.ID.Value,
 | 
				
			||||||
				PosterID:    poster.ID,
 | 
									PosterID:    poster.ID,
 | 
				
			||||||
				PosterName:  poster.Name,
 | 
									PosterName:  poster.Name,
 | 
				
			||||||
				PosterEmail: poster.Email,
 | 
									PosterEmail: poster.Email,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -473,6 +473,7 @@ func (g *GiteaDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Comm
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			allComments = append(allComments, &base.Comment{
 | 
								allComments = append(allComments, &base.Comment{
 | 
				
			||||||
				IssueIndex:  opts.Context.LocalID(),
 | 
									IssueIndex:  opts.Context.LocalID(),
 | 
				
			||||||
 | 
									Index:       comment.ID,
 | 
				
			||||||
				PosterID:    comment.Poster.ID,
 | 
									PosterID:    comment.Poster.ID,
 | 
				
			||||||
				PosterName:  comment.Poster.UserName,
 | 
									PosterName:  comment.Poster.UserName,
 | 
				
			||||||
				PosterEmail: comment.Poster.Email,
 | 
									PosterEmail: comment.Poster.Email,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -532,6 +532,7 @@ func (g *GithubDownloaderV3) getComments(issueContext base.IssueContext) ([]*bas
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			allComments = append(allComments, &base.Comment{
 | 
								allComments = append(allComments, &base.Comment{
 | 
				
			||||||
				IssueIndex:  issueContext.LocalID(),
 | 
									IssueIndex:  issueContext.LocalID(),
 | 
				
			||||||
 | 
									Index:       comment.GetID(),
 | 
				
			||||||
				PosterID:    comment.GetUser().GetID(),
 | 
									PosterID:    comment.GetUser().GetID(),
 | 
				
			||||||
				PosterName:  comment.GetUser().GetLogin(),
 | 
									PosterName:  comment.GetUser().GetLogin(),
 | 
				
			||||||
				PosterEmail: comment.GetUser().GetEmail(),
 | 
									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)
 | 
							issueIndex, _ := strconv.ParseInt((*comment.IssueURL)[idx+1:], 10, 64)
 | 
				
			||||||
		allComments = append(allComments, &base.Comment{
 | 
							allComments = append(allComments, &base.Comment{
 | 
				
			||||||
			IssueIndex:  issueIndex,
 | 
								IssueIndex:  issueIndex,
 | 
				
			||||||
 | 
								Index:       comment.GetID(),
 | 
				
			||||||
			PosterID:    comment.GetUser().GetID(),
 | 
								PosterID:    comment.GetUser().GetID(),
 | 
				
			||||||
			PosterName:  comment.GetUser().GetLogin(),
 | 
								PosterName:  comment.GetUser().GetLogin(),
 | 
				
			||||||
			PosterEmail: comment.GetUser().GetEmail(),
 | 
								PosterEmail: comment.GetUser().GetEmail(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -485,6 +485,7 @@ func (g *GitlabDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com
 | 
				
			|||||||
				for _, note := range comment.Notes {
 | 
									for _, note := range comment.Notes {
 | 
				
			||||||
					allComments = append(allComments, &base.Comment{
 | 
										allComments = append(allComments, &base.Comment{
 | 
				
			||||||
						IssueIndex:  context.LocalID(),
 | 
											IssueIndex:  context.LocalID(),
 | 
				
			||||||
 | 
											Index:       int64(note.ID),
 | 
				
			||||||
						PosterID:    int64(note.Author.ID),
 | 
											PosterID:    int64(note.Author.ID),
 | 
				
			||||||
						PosterName:  note.Author.Username,
 | 
											PosterName:  note.Author.Username,
 | 
				
			||||||
						PosterEmail: note.Author.Email,
 | 
											PosterEmail: note.Author.Email,
 | 
				
			||||||
@@ -496,6 +497,7 @@ func (g *GitlabDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com
 | 
				
			|||||||
				c := comment.Notes[0]
 | 
									c := comment.Notes[0]
 | 
				
			||||||
				allComments = append(allComments, &base.Comment{
 | 
									allComments = append(allComments, &base.Comment{
 | 
				
			||||||
					IssueIndex:  context.LocalID(),
 | 
										IssueIndex:  context.LocalID(),
 | 
				
			||||||
 | 
										Index:       int64(c.ID),
 | 
				
			||||||
					PosterID:    int64(c.Author.ID),
 | 
										PosterID:    int64(c.Author.ID),
 | 
				
			||||||
					PosterName:  c.Author.Username,
 | 
										PosterName:  c.Author.Username,
 | 
				
			||||||
					PosterEmail: c.Author.Email,
 | 
										PosterEmail: c.Author.Email,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,6 +236,7 @@ func (g *GogsDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Comme
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		allComments = append(allComments, &base.Comment{
 | 
							allComments = append(allComments, &base.Comment{
 | 
				
			||||||
			IssueIndex:  opts.Context.LocalID(),
 | 
								IssueIndex:  opts.Context.LocalID(),
 | 
				
			||||||
 | 
								Index:       comment.ID,
 | 
				
			||||||
			PosterID:    comment.Poster.ID,
 | 
								PosterID:    comment.Poster.ID,
 | 
				
			||||||
			PosterName:  comment.Poster.Login,
 | 
								PosterName:  comment.Poster.Login,
 | 
				
			||||||
			PosterEmail: comment.Poster.Email,
 | 
								PosterEmail: comment.Poster.Email,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -379,6 +379,7 @@ func (d *OneDevDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rawComments := make([]struct {
 | 
						rawComments := make([]struct {
 | 
				
			||||||
 | 
							ID      int64     `json:"id"`
 | 
				
			||||||
		Date    time.Time `json:"date"`
 | 
							Date    time.Time `json:"date"`
 | 
				
			||||||
		UserID  int64     `json:"userId"`
 | 
							UserID  int64     `json:"userId"`
 | 
				
			||||||
		Content string    `json:"content"`
 | 
							Content string    `json:"content"`
 | 
				
			||||||
@@ -429,6 +430,7 @@ func (d *OneDevDownloader) GetComments(opts base.GetCommentOptions) ([]*base.Com
 | 
				
			|||||||
		poster := d.tryGetUser(comment.UserID)
 | 
							poster := d.tryGetUser(comment.UserID)
 | 
				
			||||||
		comments = append(comments, &base.Comment{
 | 
							comments = append(comments, &base.Comment{
 | 
				
			||||||
			IssueIndex:  context.LocalID(),
 | 
								IssueIndex:  context.LocalID(),
 | 
				
			||||||
 | 
								Index:       comment.ID,
 | 
				
			||||||
			PosterID:    poster.ID,
 | 
								PosterID:    poster.ID,
 | 
				
			||||||
			PosterName:  poster.Name,
 | 
								PosterName:  poster.Name,
 | 
				
			||||||
			PosterEmail: poster.Email,
 | 
								PosterEmail: poster.Email,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user