Move merge actions to notification (#9024)
* Move merge actions to notification * Add missing mail notification
This commit is contained in:
		
							parent
							
								
									d5261b9aab
								
							
						
					
					
						commit
						d7ac9727bb
					
				| @ -152,6 +152,9 @@ func (pr *PullRequest) loadIssue(e Engine) (err error) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	pr.Issue, err = getIssueByID(e, pr.IssueID) | 	pr.Issue, err = getIssueByID(e, pr.IssueID) | ||||||
|  | 	if err == nil { | ||||||
|  | 		pr.Issue.PullRequest = pr | ||||||
|  | 	} | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ import ( | |||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
|  | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/notification/base" | 	"code.gitea.io/gitea/modules/notification/base" | ||||||
| ) | ) | ||||||
| @ -191,3 +192,17 @@ func (a *actionNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | |||||||
| 		log.Error("notify watchers '%d/%d': %v", review.Reviewer.ID, review.Issue.RepoID, err) | 		log.Error("notify watchers '%d/%d': %v", review.Reviewer.ID, review.Issue.RepoID, err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (*actionNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | ||||||
|  | 	if err := models.NotifyWatchers(&models.Action{ | ||||||
|  | 		ActUserID: doer.ID, | ||||||
|  | 		ActUser:   doer, | ||||||
|  | 		OpType:    models.ActionMergePullRequest, | ||||||
|  | 		Content:   fmt.Sprintf("%d|%s", pr.Issue.Index, pr.Issue.Title), | ||||||
|  | 		RepoID:    pr.Issue.Repo.ID, | ||||||
|  | 		Repo:      pr.Issue.Repo, | ||||||
|  | 		IsPrivate: pr.Issue.Repo.IsPrivate, | ||||||
|  | 	}); err != nil { | ||||||
|  | 		log.Error("NotifyWatchers [%d]: %v", pr.ID, err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
|  | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/notification/base" | 	"code.gitea.io/gitea/modules/notification/base" | ||||||
| 	"code.gitea.io/gitea/services/mailer" | 	"code.gitea.io/gitea/services/mailer" | ||||||
| @ -98,3 +99,14 @@ func (m *mailNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *model | |||||||
| 		mailer.SendIssueAssignedMail(issue, doer, ct, comment, []string{assignee.Email}) | 		mailer.SendIssueAssignedMail(issue, doer, ct, comment, []string{assignee.Email}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (m *mailNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | ||||||
|  | 	if err := pr.LoadIssue(); err != nil { | ||||||
|  | 		log.Error("pr.LoadIssue: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := mailer.MailParticipants(pr.Issue, doer, models.ActionClosePullRequest); err != nil { | ||||||
|  | 		log.Error("MailParticipants: %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
| @ -521,6 +521,44 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | ||||||
|  | 	// Reload pull request information.
 | ||||||
|  | 	if err := pr.LoadAttributes(); err != nil { | ||||||
|  | 		log.Error("LoadAttributes: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := pr.LoadIssue(); err != nil { | ||||||
|  | 		log.Error("LoadAttributes: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := pr.Issue.LoadRepo(); err != nil { | ||||||
|  | 		log.Error("pr.Issue.LoadRepo: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	mode, err := models.AccessLevel(doer, pr.Issue.Repo) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Error("models.AccessLevel: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Merge pull request calls issue.changeStatus so we need to handle separately.
 | ||||||
|  | 	apiPullRequest := &api.PullRequestPayload{ | ||||||
|  | 		Index:       pr.Issue.Index, | ||||||
|  | 		PullRequest: pr.APIFormat(), | ||||||
|  | 		Repository:  pr.Issue.Repo.APIFormat(mode), | ||||||
|  | 		Sender:      doer.APIFormat(), | ||||||
|  | 		Action:      api.HookIssueClosed, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, apiPullRequest) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Error("PrepareWebhooks: %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | ||||||
| 	var reviewHookType models.HookEventType | 	var reviewHookType models.HookEventType | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -716,8 +716,6 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	notification.NotifyMergePullRequest(pr, ctx.User, ctx.Repo.GitRepo) |  | ||||||
| 
 |  | ||||||
| 	log.Trace("Pull request merged: %d", pr.ID) | 	log.Trace("Pull request merged: %d", pr.ID) | ||||||
| 	ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) | 	ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) | ||||||
| } | } | ||||||
|  | |||||||
| @ -426,29 +426,11 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor | |||||||
| 		log.Error("setMerged [%d]: %v", pr.ID, err) | 		log.Error("setMerged [%d]: %v", pr.ID, err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := models.NotifyWatchers(&models.Action{ | 	notification.NotifyMergePullRequest(pr, doer, baseGitRepo) | ||||||
| 		ActUserID: doer.ID, |  | ||||||
| 		ActUser:   doer, |  | ||||||
| 		OpType:    models.ActionMergePullRequest, |  | ||||||
| 		Content:   fmt.Sprintf("%d|%s", pr.Issue.Index, pr.Issue.Title), |  | ||||||
| 		RepoID:    pr.Issue.Repo.ID, |  | ||||||
| 		Repo:      pr.Issue.Repo, |  | ||||||
| 		IsPrivate: pr.Issue.Repo.IsPrivate, |  | ||||||
| 	}); err != nil { |  | ||||||
| 		log.Error("NotifyWatchers [%d]: %v", pr.ID, err) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	// Reset cached commit count
 | 	// Reset cached commit count
 | ||||||
| 	cache.Remove(pr.Issue.Repo.GetCommitsCountCacheKey(pr.BaseBranch, true)) | 	cache.Remove(pr.Issue.Repo.GetCommitsCountCacheKey(pr.BaseBranch, true)) | ||||||
| 
 | 
 | ||||||
| 	// Reload pull request information.
 |  | ||||||
| 	if err = pr.LoadAttributes(); err != nil { |  | ||||||
| 		log.Error("LoadAttributes: %v", err) |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	notification.NotifyIssueChangeStatus(doer, pr.Issue, true) |  | ||||||
| 
 |  | ||||||
| 	// Resolve cross references
 | 	// Resolve cross references
 | ||||||
| 	refs, err := pr.ResolveCrossReferences() | 	refs, err := pr.ResolveCrossReferences() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user