Skip to content

Commit d7ac972

Browse files
lunnytechknowlogick
authored andcommitted
Move merge actions to notification (#9024)
* Move merge actions to notification * Add missing mail notification
1 parent d5261b9 commit d7ac972

File tree

6 files changed

+69
-21
lines changed

6 files changed

+69
-21
lines changed

Diff for: models/pull.go

+3
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ func (pr *PullRequest) loadIssue(e Engine) (err error) {
152152
}
153153

154154
pr.Issue, err = getIssueByID(e, pr.IssueID)
155+
if err == nil {
156+
pr.Issue.PullRequest = pr
157+
}
155158
return err
156159
}
157160

Diff for: modules/notification/action/action.go

+15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"strings"
1111

1212
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/modules/git"
1314
"code.gitea.io/gitea/modules/log"
1415
"code.gitea.io/gitea/modules/notification/base"
1516
)
@@ -191,3 +192,17 @@ func (a *actionNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
191192
log.Error("notify watchers '%d/%d': %v", review.Reviewer.ID, review.Issue.RepoID, err)
192193
}
193194
}
195+
196+
func (*actionNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) {
197+
if err := models.NotifyWatchers(&models.Action{
198+
ActUserID: doer.ID,
199+
ActUser: doer,
200+
OpType: models.ActionMergePullRequest,
201+
Content: fmt.Sprintf("%d|%s", pr.Issue.Index, pr.Issue.Title),
202+
RepoID: pr.Issue.Repo.ID,
203+
Repo: pr.Issue.Repo,
204+
IsPrivate: pr.Issue.Repo.IsPrivate,
205+
}); err != nil {
206+
log.Error("NotifyWatchers [%d]: %v", pr.ID, err)
207+
}
208+
}

Diff for: modules/notification/mail/mail.go

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99

1010
"code.gitea.io/gitea/models"
11+
"code.gitea.io/gitea/modules/git"
1112
"code.gitea.io/gitea/modules/log"
1213
"code.gitea.io/gitea/modules/notification/base"
1314
"code.gitea.io/gitea/services/mailer"
@@ -98,3 +99,14 @@ func (m *mailNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *model
9899
mailer.SendIssueAssignedMail(issue, doer, ct, comment, []string{assignee.Email})
99100
}
100101
}
102+
103+
func (m *mailNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) {
104+
if err := pr.LoadIssue(); err != nil {
105+
log.Error("pr.LoadIssue: %v", err)
106+
return
107+
}
108+
109+
if err := mailer.MailParticipants(pr.Issue, doer, models.ActionClosePullRequest); err != nil {
110+
log.Error("MailParticipants: %v", err)
111+
}
112+
}

Diff for: modules/notification/webhook/webhook.go

+38
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,44 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re
521521
}
522522
}
523523

524+
func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) {
525+
// Reload pull request information.
526+
if err := pr.LoadAttributes(); err != nil {
527+
log.Error("LoadAttributes: %v", err)
528+
return
529+
}
530+
531+
if err := pr.LoadIssue(); err != nil {
532+
log.Error("LoadAttributes: %v", err)
533+
return
534+
}
535+
536+
if err := pr.Issue.LoadRepo(); err != nil {
537+
log.Error("pr.Issue.LoadRepo: %v", err)
538+
return
539+
}
540+
541+
mode, err := models.AccessLevel(doer, pr.Issue.Repo)
542+
if err != nil {
543+
log.Error("models.AccessLevel: %v", err)
544+
return
545+
}
546+
547+
// Merge pull request calls issue.changeStatus so we need to handle separately.
548+
apiPullRequest := &api.PullRequestPayload{
549+
Index: pr.Issue.Index,
550+
PullRequest: pr.APIFormat(),
551+
Repository: pr.Issue.Repo.APIFormat(mode),
552+
Sender: doer.APIFormat(),
553+
Action: api.HookIssueClosed,
554+
}
555+
556+
err = webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, apiPullRequest)
557+
if err != nil {
558+
log.Error("PrepareWebhooks: %v", err)
559+
}
560+
}
561+
524562
func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) {
525563
var reviewHookType models.HookEventType
526564

Diff for: routers/repo/pull.go

-2
Original file line numberDiff line numberDiff line change
@@ -716,8 +716,6 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) {
716716
return
717717
}
718718

719-
notification.NotifyMergePullRequest(pr, ctx.User, ctx.Repo.GitRepo)
720-
721719
log.Trace("Pull request merged: %d", pr.ID)
722720
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index))
723721
}

Diff for: services/pull/merge.go

+1-19
Original file line numberDiff line numberDiff line change
@@ -426,29 +426,11 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
426426
log.Error("setMerged [%d]: %v", pr.ID, err)
427427
}
428428

429-
if err := models.NotifyWatchers(&models.Action{
430-
ActUserID: doer.ID,
431-
ActUser: doer,
432-
OpType: models.ActionMergePullRequest,
433-
Content: fmt.Sprintf("%d|%s", pr.Issue.Index, pr.Issue.Title),
434-
RepoID: pr.Issue.Repo.ID,
435-
Repo: pr.Issue.Repo,
436-
IsPrivate: pr.Issue.Repo.IsPrivate,
437-
}); err != nil {
438-
log.Error("NotifyWatchers [%d]: %v", pr.ID, err)
439-
}
429+
notification.NotifyMergePullRequest(pr, doer, baseGitRepo)
440430

441431
// Reset cached commit count
442432
cache.Remove(pr.Issue.Repo.GetCommitsCountCacheKey(pr.BaseBranch, true))
443433

444-
// Reload pull request information.
445-
if err = pr.LoadAttributes(); err != nil {
446-
log.Error("LoadAttributes: %v", err)
447-
return nil
448-
}
449-
450-
notification.NotifyIssueChangeStatus(doer, pr.Issue, true)
451-
452434
// Resolve cross references
453435
refs, err := pr.ResolveCrossReferences()
454436
if err != nil {

0 commit comments

Comments
 (0)