mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Add ActionCommentPull action (#9456)
* Add ActionCommentPull action Adds ActionCommentPull action to distinguish between a comment on an issue and on a pull request * Update modules/notification/action/action.go Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -50,6 +50,7 @@ const (
 | 
				
			|||||||
	ActionMirrorSyncDelete                         // 20
 | 
						ActionMirrorSyncDelete                         // 20
 | 
				
			||||||
	ActionApprovePullRequest                       // 21
 | 
						ActionApprovePullRequest                       // 21
 | 
				
			||||||
	ActionRejectPullRequest                        // 22
 | 
						ActionRejectPullRequest                        // 22
 | 
				
			||||||
 | 
						ActionCommentPull                              // 23
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Action represents user operation type and other information to
 | 
					// Action represents user operation type and other information to
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -210,7 +210,7 @@ func notifyWatchers(e Engine, act *Action) error {
 | 
				
			|||||||
			if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypeIssues) {
 | 
								if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypeIssues) {
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		case ActionCreatePullRequest, ActionMergePullRequest, ActionClosePullRequest, ActionReopenPullRequest:
 | 
							case ActionCreatePullRequest, ActionCommentPull, ActionMergePullRequest, ActionClosePullRequest, ActionReopenPullRequest:
 | 
				
			||||||
			if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypePullRequests) {
 | 
								if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypePullRequests) {
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,7 +90,6 @@ func (a *actionNotifier) NotifyIssueChangeStatus(doer *models.User, issue *model
 | 
				
			|||||||
func (a *actionNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
 | 
					func (a *actionNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
 | 
				
			||||||
	issue *models.Issue, comment *models.Comment) {
 | 
						issue *models.Issue, comment *models.Comment) {
 | 
				
			||||||
	act := &models.Action{
 | 
						act := &models.Action{
 | 
				
			||||||
		OpType:    models.ActionCommentIssue,
 | 
					 | 
				
			||||||
		ActUserID: doer.ID,
 | 
							ActUserID: doer.ID,
 | 
				
			||||||
		ActUser:   doer,
 | 
							ActUser:   doer,
 | 
				
			||||||
		Content:   fmt.Sprintf("%d|%s", issue.Index, comment.Content),
 | 
							Content:   fmt.Sprintf("%d|%s", issue.Index, comment.Content),
 | 
				
			||||||
@@ -100,6 +99,11 @@ func (a *actionNotifier) NotifyCreateIssueComment(doer *models.User, repo *model
 | 
				
			|||||||
		CommentID: comment.ID,
 | 
							CommentID: comment.ID,
 | 
				
			||||||
		IsPrivate: issue.Repo.IsPrivate,
 | 
							IsPrivate: issue.Repo.IsPrivate,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if issue.IsPull {
 | 
				
			||||||
 | 
							act.OpType = models.ActionCommentPull
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							act.OpType = models.ActionCommentIssue
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Notify watchers for whatever action comes in, ignore if no action type.
 | 
						// Notify watchers for whatever action comes in, ignore if no action type.
 | 
				
			||||||
	if err := models.NotifyWatchers(act); err != nil {
 | 
						if err := models.NotifyWatchers(act); err != nil {
 | 
				
			||||||
@@ -208,7 +212,7 @@ func (a *actionNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
 | 
				
			|||||||
					ActUserID: review.Reviewer.ID,
 | 
										ActUserID: review.Reviewer.ID,
 | 
				
			||||||
					ActUser:   review.Reviewer,
 | 
										ActUser:   review.Reviewer,
 | 
				
			||||||
					Content:   fmt.Sprintf("%d|%s", review.Issue.Index, strings.Split(comm.Content, "\n")[0]),
 | 
										Content:   fmt.Sprintf("%d|%s", review.Issue.Index, strings.Split(comm.Content, "\n")[0]),
 | 
				
			||||||
					OpType:    models.ActionCommentIssue,
 | 
										OpType:    models.ActionCommentPull,
 | 
				
			||||||
					RepoID:    review.Issue.RepoID,
 | 
										RepoID:    review.Issue.RepoID,
 | 
				
			||||||
					Repo:      review.Issue.Repo,
 | 
										Repo:      review.Issue.Repo,
 | 
				
			||||||
					IsPrivate: review.Issue.Repo.IsPrivate,
 | 
										IsPrivate: review.Issue.Repo.IsPrivate,
 | 
				
			||||||
@@ -237,7 +241,7 @@ func (a *actionNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
 | 
				
			|||||||
		case models.ReviewTypeReject:
 | 
							case models.ReviewTypeReject:
 | 
				
			||||||
			action.OpType = models.ActionRejectPullRequest
 | 
								action.OpType = models.ActionRejectPullRequest
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			action.OpType = models.ActionCommentIssue
 | 
								action.OpType = models.ActionCommentPull
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		actions = append(actions, action)
 | 
							actions = append(actions, action)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,7 +85,7 @@ func (m *mailNotifier) NotifyPullRequestReview(pr *models.PullRequest, r *models
 | 
				
			|||||||
	} else if comment.Type == models.CommentTypeReopen {
 | 
						} else if comment.Type == models.CommentTypeReopen {
 | 
				
			||||||
		act = models.ActionReopenIssue
 | 
							act = models.ActionReopenIssue
 | 
				
			||||||
	} else if comment.Type == models.CommentTypeComment {
 | 
						} else if comment.Type == models.CommentTypeComment {
 | 
				
			||||||
		act = models.ActionCommentIssue
 | 
							act = models.ActionCommentPull
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := mailer.MailParticipantsComment(comment, act, pr.Issue); err != nil {
 | 
						if err := mailer.MailParticipantsComment(comment, act, pr.Issue); err != nil {
 | 
				
			||||||
		log.Error("MailParticipantsComment: %v", err)
 | 
							log.Error("MailParticipantsComment: %v", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -548,7 +548,7 @@ func ActionIcon(opType models.ActionType) string {
 | 
				
			|||||||
		return "issue-opened"
 | 
							return "issue-opened"
 | 
				
			||||||
	case models.ActionCreatePullRequest:
 | 
						case models.ActionCreatePullRequest:
 | 
				
			||||||
		return "git-pull-request"
 | 
							return "git-pull-request"
 | 
				
			||||||
	case models.ActionCommentIssue:
 | 
						case models.ActionCommentIssue, models.ActionCommentPull:
 | 
				
			||||||
		return "comment-discussion"
 | 
							return "comment-discussion"
 | 
				
			||||||
	case models.ActionMergePullRequest:
 | 
						case models.ActionMergePullRequest:
 | 
				
			||||||
		return "git-merge"
 | 
							return "git-merge"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2047,6 +2047,7 @@ create_pull_request = `created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
				
			|||||||
close_pull_request = `closed pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
					close_pull_request = `closed pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
				
			||||||
reopen_pull_request = `reopened pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
					reopen_pull_request = `reopened pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
				
			||||||
comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
					comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
				
			||||||
 | 
					comment_pull = `commented on pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
				
			||||||
merge_pull_request = `merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
					merge_pull_request = `merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
				
			||||||
transfer_repo = transferred repository <code>%s</code> to <a href="%s">%s</a>
 | 
					transfer_repo = transferred repository <code>%s</code> to <a href="%s">%s</a>
 | 
				
			||||||
push_tag = pushed tag <a href="%s/src/tag/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
 | 
					push_tag = pushed tag <a href="%s/src/tag/%s">%[2]s</a> to <a href="%[1]s">%[3]s</a>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -291,7 +291,7 @@ func actionToTemplate(issue *models.Issue, actionType models.ActionType,
 | 
				
			|||||||
	switch actionType {
 | 
						switch actionType {
 | 
				
			||||||
	case models.ActionCreateIssue, models.ActionCreatePullRequest:
 | 
						case models.ActionCreateIssue, models.ActionCreatePullRequest:
 | 
				
			||||||
		name = "new"
 | 
							name = "new"
 | 
				
			||||||
	case models.ActionCommentIssue:
 | 
						case models.ActionCommentIssue, models.ActionCommentPull:
 | 
				
			||||||
		name = "comment"
 | 
							name = "comment"
 | 
				
			||||||
	case models.ActionCloseIssue, models.ActionClosePullRequest:
 | 
						case models.ActionCloseIssue, models.ActionClosePullRequest:
 | 
				
			||||||
		name = "close"
 | 
							name = "close"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,7 +153,7 @@ func TestTemplateSelection(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	pull := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 2, Repo: repo, Poster: doer}).(*models.Issue)
 | 
						pull := models.AssertExistsAndLoadBean(t, &models.Issue{ID: 2, Repo: repo, Poster: doer}).(*models.Issue)
 | 
				
			||||||
	comment = models.AssertExistsAndLoadBean(t, &models.Comment{ID: 4, Issue: pull}).(*models.Comment)
 | 
						comment = models.AssertExistsAndLoadBean(t, &models.Comment{ID: 4, Issue: pull}).(*models.Comment)
 | 
				
			||||||
	msg = testComposeIssueCommentMessage(t, &mailCommentContext{Issue: pull, Doer: doer, ActionType: models.ActionCommentIssue,
 | 
						msg = testComposeIssueCommentMessage(t, &mailCommentContext{Issue: pull, Doer: doer, ActionType: models.ActionCommentPull,
 | 
				
			||||||
		Content: "test body", Comment: comment}, tos, false, "TestTemplateSelection")
 | 
							Content: "test body", Comment: comment}, tos, false, "TestTemplateSelection")
 | 
				
			||||||
	expect(t, msg, "pull/comment/subject", "pull/comment/body")
 | 
						expect(t, msg, "pull/comment/subject", "pull/comment/body")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,6 +67,9 @@
 | 
				
			|||||||
						{{else if eq .GetOpType 22}}
 | 
											{{else if eq .GetOpType 22}}
 | 
				
			||||||
							{{ $index := index .GetIssueInfos 0}}
 | 
												{{ $index := index .GetIssueInfos 0}}
 | 
				
			||||||
							{{$.i18n.Tr "action.reject_pull_request" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
												{{$.i18n.Tr "action.reject_pull_request" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
				
			||||||
 | 
											{{else if eq .GetOpType 23}}
 | 
				
			||||||
 | 
												{{ $index := index .GetIssueInfos 0}}
 | 
				
			||||||
 | 
												{{$.i18n.Tr "action.comment_pull" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
				
			||||||
						{{end}}
 | 
											{{end}}
 | 
				
			||||||
					</p>
 | 
										</p>
 | 
				
			||||||
					{{if or (eq .GetOpType 5) (eq .GetOpType 18)}}
 | 
										{{if or (eq .GetOpType 5) (eq .GetOpType 18)}}
 | 
				
			||||||
@@ -86,7 +89,7 @@
 | 
				
			|||||||
						<span class="text truncate issue title has-emoji">{{index .GetIssueInfos 1}}</span>
 | 
											<span class="text truncate issue title has-emoji">{{index .GetIssueInfos 1}}</span>
 | 
				
			||||||
					{{else if eq .GetOpType 7}}
 | 
										{{else if eq .GetOpType 7}}
 | 
				
			||||||
						<span class="text truncate issue title has-emoji">{{index .GetIssueInfos 1}}</span>
 | 
											<span class="text truncate issue title has-emoji">{{index .GetIssueInfos 1}}</span>
 | 
				
			||||||
					{{else if or (eq .GetOpType 10) (eq .GetOpType 21) (eq .GetOpType 22)}}
 | 
										{{else if or (eq .GetOpType 10) (eq .GetOpType 21) (eq .GetOpType 22) (eq .GetOpType 23)}}
 | 
				
			||||||
						<a href="{{.GetCommentLink}}" class="text truncate issue title has-emoji">{{.GetIssueTitle}}</a>
 | 
											<a href="{{.GetCommentLink}}" class="text truncate issue title has-emoji">{{.GetIssueTitle}}</a>
 | 
				
			||||||
						<p class="text light grey has-emoji">{{index .GetIssueInfos 1}}</p>
 | 
											<p class="text light grey has-emoji">{{index .GetIssueInfos 1}}</p>
 | 
				
			||||||
					{{else if eq .GetOpType 11}}
 | 
										{{else if eq .GetOpType 11}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user