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:
		
							parent
							
								
									875d6b2f8e
								
							
						
					
					
						commit
						1df701fd1a
					
				
					 9 changed files with 18 additions and 9 deletions
				
			
		|  | @ -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}} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue