Skip to content

Commit 17f170e

Browse files
authored
Include resource state events in Gitlab downloads (#29382)
Some specific events on Gitlab issues and merge requests are stored separately from comments as "resource state events". With this change, all relevant resource state events are downloaded during issue and merge request migration, and converted to comments. This PR also updates the template used to render comments to add support for migrated comments of these types. ref: https://docs.gitlab.com/ee/api/resource_state_events.html
1 parent 6595241 commit 17f170e

File tree

4 files changed

+86
-40
lines changed

4 files changed

+86
-40
lines changed

services/migrations/gitea_uploader.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,10 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
483483
}
484484

485485
switch cm.Type {
486+
case issues_model.CommentTypeReopen:
487+
cm.Content = ""
488+
case issues_model.CommentTypeClose:
489+
cm.Content = ""
486490
case issues_model.CommentTypeAssignees:
487491
if assigneeID, ok := comment.Meta["AssigneeID"].(int); ok {
488492
cm.AssigneeID = int64(assigneeID)
@@ -503,6 +507,8 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
503507
cm.NewRef = fmt.Sprint(comment.Meta["NewRef"])
504508
cm.Content = ""
505509
}
510+
case issues_model.CommentTypeMergePull:
511+
cm.Content = ""
506512
case issues_model.CommentTypePRScheduledToAutoMerge, issues_model.CommentTypePRUnScheduledToAutoMerge:
507513
cm.Content = ""
508514
default:

services/migrations/gitlab.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,60 @@ func (g *GitlabDownloader) GetComments(commentable base.Commentable) ([]*base.Co
517517
}
518518
page = resp.NextPage
519519
}
520+
521+
page = 1
522+
for {
523+
var stateEvents []*gitlab.StateEvent
524+
var resp *gitlab.Response
525+
var err error
526+
if context.IsMergeRequest {
527+
stateEvents, resp, err = g.client.ResourceStateEvents.ListMergeStateEvents(g.repoID, int(commentable.GetForeignIndex()), &gitlab.ListStateEventsOptions{
528+
ListOptions: gitlab.ListOptions{
529+
Page: page,
530+
PerPage: g.maxPerPage,
531+
},
532+
}, nil, gitlab.WithContext(g.ctx))
533+
} else {
534+
stateEvents, resp, err = g.client.ResourceStateEvents.ListIssueStateEvents(g.repoID, int(commentable.GetForeignIndex()), &gitlab.ListStateEventsOptions{
535+
ListOptions: gitlab.ListOptions{
536+
Page: page,
537+
PerPage: g.maxPerPage,
538+
},
539+
}, nil, gitlab.WithContext(g.ctx))
540+
}
541+
if err != nil {
542+
return nil, false, fmt.Errorf("error while listing state events: %v %w", g.repoID, err)
543+
}
544+
545+
for _, stateEvent := range stateEvents {
546+
comment := &base.Comment{
547+
IssueIndex: commentable.GetLocalIndex(),
548+
Index: int64(stateEvent.ID),
549+
PosterID: int64(stateEvent.User.ID),
550+
PosterName: stateEvent.User.Username,
551+
Content: "",
552+
Created: *stateEvent.CreatedAt,
553+
}
554+
switch stateEvent.State {
555+
case gitlab.ClosedEventType:
556+
comment.CommentType = issues_model.CommentTypeClose.String()
557+
case gitlab.MergedEventType:
558+
comment.CommentType = issues_model.CommentTypeMergePull.String()
559+
case gitlab.ReopenedEventType:
560+
comment.CommentType = issues_model.CommentTypeReopen.String()
561+
default:
562+
// Ignore other event types
563+
continue
564+
}
565+
allComments = append(allComments, comment)
566+
}
567+
568+
if resp.NextPage == 0 {
569+
break
570+
}
571+
page = resp.NextPage
572+
}
573+
520574
return allComments, true, nil
521575
}
522576

templates/repo/issue/view_content/comments.tmpl

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@
8181
{{else if eq .Type 1}}
8282
<div class="timeline-item event" id="{{.HashTag}}">
8383
<span class="badge gt-bg-green gt-text-white">{{svg "octicon-dot-fill"}}</span>
84-
{{template "shared/user/avatarlink" dict "user" .Poster}}
84+
{{if not .OriginalAuthor}}
85+
{{template "shared/user/avatarlink" dict "user" .Poster}}
86+
{{end}}
8587
<span class="text grey muted-links">
86-
{{template "shared/user/authorlink" .Poster}}
88+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
8789
{{if .Issue.IsPull}}
8890
{{ctx.Locale.Tr "repo.pulls.reopened_at" .EventTag $createdStr}}
8991
{{else}}
@@ -94,9 +96,11 @@
9496
{{else if eq .Type 2}}
9597
<div class="timeline-item event" id="{{.HashTag}}">
9698
<span class="badge gt-bg-red gt-text-white">{{svg "octicon-circle-slash"}}</span>
97-
{{template "shared/user/avatarlink" dict "user" .Poster}}
99+
{{if not .OriginalAuthor}}
100+
{{template "shared/user/avatarlink" dict "user" .Poster}}
101+
{{end}}
98102
<span class="text grey muted-links">
99-
{{template "shared/user/authorlink" .Poster}}
103+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
100104
{{if .Issue.IsPull}}
101105
{{ctx.Locale.Tr "repo.pulls.closed_at" .EventTag $createdStr}}
102106
{{else}}
@@ -107,9 +111,11 @@
107111
{{else if eq .Type 28}}
108112
<div class="timeline-item event" id="{{.HashTag}}">
109113
<span class="badge gt-bg-purple gt-text-white">{{svg "octicon-git-merge"}}</span>
110-
{{template "shared/user/avatarlink" dict "user" .Poster}}
114+
{{if not .OriginalAuthor}}
115+
{{template "shared/user/avatarlink" dict "user" .Poster}}
116+
{{end}}
111117
<span class="text grey muted-links">
112-
{{template "shared/user/authorlink" .Poster}}
118+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
113119
{{$link := printf "%s/commit/%s" $.Repository.Link ($.Issue.PullRequest.MergedCommitID|PathEscape)}}
114120
{{if eq $.Issue.PullRequest.Status 3}}
115121
{{ctx.Locale.Tr "repo.issues.comment_manually_pull_merged_at" (HTMLFormat `<a class="ui sha" href="%[1]s"><b>%[2]s</b></a>` $link (ShortSha $.Issue.PullRequest.MergedCommitID)) (HTMLFormat "<b>%[1]s</b>" $.BaseTarget) $createdStr}}
@@ -375,18 +381,7 @@
375381
{{end}}
376382
<span class="badge{{if eq .Review.Type 1}} gt-bg-green gt-text-white{{else if eq .Review.Type 3}} gt-bg-red gt-text-white{{end}}">{{svg (printf "octicon-%s" .Review.Type.Icon)}}</span>
377383
<span class="text grey muted-links">
378-
{{if .OriginalAuthor}}
379-
<span class="text black">
380-
{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
381-
{{.OriginalAuthor}}
382-
</span>
383-
{{if $.Repository.OriginalURL}}
384-
<span class="migrate">({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}})</span>
385-
{{end}}
386-
{{else}}
387-
{{template "shared/user/authorlink" .Poster}}
388-
{{end}}
389-
384+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
390385
{{if eq .Review.Type 1}}
391386
{{ctx.Locale.Tr "repo.issues.review.approve" $createdStr}}
392387
{{else if eq .Review.Type 2}}
@@ -498,17 +493,7 @@
498493
{{template "shared/user/avatarlink" dict "user" .Poster}}
499494
{{end}}
500495
<span class="text grey muted-links">
501-
{{if .OriginalAuthor}}
502-
<span class="text black">
503-
{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
504-
{{.OriginalAuthor}}
505-
</span>
506-
{{if $.Repository.OriginalURL}}
507-
<span class="migrate">({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}})</span>
508-
{{end}}
509-
{{else}}
510-
{{template "shared/user/authorlink" .Poster}}
511-
{{end}}
496+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
512497
{{ctx.Locale.Tr "repo.pulls.change_target_branch_at" .OldRef .NewRef $createdStr}}
513498
</span>
514499
</div>
@@ -675,17 +660,7 @@
675660
<div class="timeline-item event" id="{{.HashTag}}">
676661
<span class="badge">{{svg "octicon-git-merge" 16}}</span>
677662
<span class="text grey muted-links">
678-
{{if .OriginalAuthor}}
679-
<span class="text black">
680-
{{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
681-
{{.OriginalAuthor}}
682-
</span>
683-
{{if $.Repository.OriginalURL}}
684-
<span class="migrate">({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}})</span>
685-
{{end}}
686-
{{else}}
687-
{{template "shared/user/authorlink" .Poster}}
688-
{{end}}
663+
{{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
689664
{{if eq .Type 34}}{{ctx.Locale.Tr "repo.pulls.auto_merge_newly_scheduled_comment" $createdStr}}
690665
{{else}}{{ctx.Locale.Tr "repo.pulls.auto_merge_canceled_schedule_comment" $createdStr}}{{end}}
691666
</span>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{{if .comment.OriginalAuthor}}
2+
<span class="text black">
3+
{{svg (MigrationIcon .ctxData.Repository.GetOriginalURLHostname)}}
4+
{{.comment.OriginalAuthor}}
5+
</span>
6+
{{if .ctxData.Repository.OriginalURL}}
7+
<span class="migrate">({{ctx.Locale.Tr "repo.migrated_from" .ctxData.Repository.OriginalURL .ctxData.Repository.GetOriginalURLHostname}})</span>
8+
{{end}}
9+
{{else}}
10+
{{template "shared/user/authorlink" .comment.Poster}}
11+
{{end}}

0 commit comments

Comments
 (0)