Skip to content

Commit aaeef29

Browse files
authored
Move pull webhook to notification (#8805)
* Move pull webhook to notification * fix fmt
1 parent 05e7715 commit aaeef29

File tree

7 files changed

+83
-70
lines changed

7 files changed

+83
-70
lines changed

modules/notification/base/notifier.go

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type Notifier interface {
3030

3131
NotifyNewPullRequest(*models.PullRequest)
3232
NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository)
33+
NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest)
3334
NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment)
3435

3536
NotifyCreateIssueComment(*models.User, *models.Repository,

modules/notification/base/null.go

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ func (*NullNotifier) NotifyPullRequestReview(pr *models.PullRequest, r *models.R
4646
func (*NullNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) {
4747
}
4848

49+
// NotifyPullRequestSynchronized places a place holder function
50+
func (*NullNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
51+
}
52+
4953
// NotifyUpdateComment places a place holder function
5054
func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
5155
}

modules/notification/notification.go

+7
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ func NotifyNewPullRequest(pr *models.PullRequest) {
7373
}
7474
}
7575

76+
// NotifyPullRequestSynchronized notifies Synchronized pull request
77+
func NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
78+
for _, notifier := range notifiers {
79+
notifier.NotifyPullRequestSynchronized(doer, pr)
80+
}
81+
}
82+
7683
// NotifyPullRequestReview notifies new pull request review
7784
func NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) {
7885
for _, notifier := range notifiers {

modules/notification/webhook/webhook.go

+62
Original file line numberDiff line numberDiff line change
@@ -520,3 +520,65 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re
520520
log.Error("PrepareWebhooks: %v", err)
521521
}
522522
}
523+
524+
func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) {
525+
var reviewHookType models.HookEventType
526+
527+
switch review.Type {
528+
case models.ReviewTypeApprove:
529+
reviewHookType = models.HookEventPullRequestApproved
530+
case models.ReviewTypeComment:
531+
reviewHookType = models.HookEventPullRequestComment
532+
case models.ReviewTypeReject:
533+
reviewHookType = models.HookEventPullRequestRejected
534+
default:
535+
// unsupported review webhook type here
536+
log.Error("Unsupported review webhook type")
537+
return
538+
}
539+
540+
if err := pr.LoadIssue(); err != nil {
541+
log.Error("pr.LoadIssue: %v", err)
542+
return
543+
}
544+
545+
mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo)
546+
if err != nil {
547+
log.Error("models.AccessLevel: %v", err)
548+
return
549+
}
550+
if err := webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{
551+
Action: api.HookIssueSynchronized,
552+
Index: review.Issue.Index,
553+
PullRequest: pr.APIFormat(),
554+
Repository: review.Issue.Repo.APIFormat(mode),
555+
Sender: review.Reviewer.APIFormat(),
556+
Review: &api.ReviewPayload{
557+
Type: string(reviewHookType),
558+
Content: review.Content,
559+
},
560+
}); err != nil {
561+
log.Error("PrepareWebhooks: %v", err)
562+
}
563+
}
564+
565+
func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) {
566+
if err := pr.LoadIssue(); err != nil {
567+
log.Error("pr.LoadIssue: %v", err)
568+
return
569+
}
570+
if err := pr.Issue.LoadAttributes(); err != nil {
571+
log.Error("LoadAttributes: %v", err)
572+
return
573+
}
574+
575+
if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
576+
Action: api.HookIssueSynchronized,
577+
Index: pr.Issue.Index,
578+
PullRequest: pr.Issue.PullRequest.APIFormat(),
579+
Repository: pr.Issue.Repo.APIFormat(models.AccessModeNone),
580+
Sender: doer.APIFormat(),
581+
}); err != nil {
582+
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
583+
}
584+
}

services/pull/merge.go

+2-12
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ import (
2020
"code.gitea.io/gitea/modules/cache"
2121
"code.gitea.io/gitea/modules/git"
2222
"code.gitea.io/gitea/modules/log"
23+
"code.gitea.io/gitea/modules/notification"
2324
"code.gitea.io/gitea/modules/setting"
24-
api "code.gitea.io/gitea/modules/structs"
2525
"code.gitea.io/gitea/modules/timeutil"
26-
"code.gitea.io/gitea/modules/webhook"
2726

2827
"github.com/mcuadros/go-version"
2928
)
@@ -360,16 +359,7 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
360359
return nil
361360
}
362361

363-
mode, _ := models.AccessLevel(doer, pr.Issue.Repo)
364-
if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
365-
Action: api.HookIssueClosed,
366-
Index: pr.Index,
367-
PullRequest: pr.APIFormat(),
368-
Repository: pr.Issue.Repo.APIFormat(mode),
369-
Sender: doer.APIFormat(),
370-
}); err != nil {
371-
log.Error("PrepareWebhooks: %v", err)
372-
}
362+
notification.NotifyIssueChangeStatus(doer, pr.Issue, true)
373363

374364
return nil
375365
}

services/pull/pull.go

+1-17
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"code.gitea.io/gitea/modules/git"
1212
"code.gitea.io/gitea/modules/log"
1313
"code.gitea.io/gitea/modules/notification"
14-
api "code.gitea.io/gitea/modules/structs"
15-
"code.gitea.io/gitea/modules/webhook"
1614
issue_service "code.gitea.io/gitea/services/issue"
1715
)
1816

@@ -90,23 +88,9 @@ func AddTestPullRequestTask(doer *models.User, repoID int64, branch string, isSy
9088
if err == nil {
9189
for _, pr := range prs {
9290
pr.Issue.PullRequest = pr
93-
if err = pr.Issue.LoadAttributes(); err != nil {
94-
log.Error("LoadAttributes: %v", err)
95-
continue
96-
}
97-
if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
98-
Action: api.HookIssueSynchronized,
99-
Index: pr.Issue.Index,
100-
PullRequest: pr.Issue.PullRequest.APIFormat(),
101-
Repository: pr.Issue.Repo.APIFormat(models.AccessModeNone),
102-
Sender: doer.APIFormat(),
103-
}); err != nil {
104-
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
105-
continue
106-
}
91+
notification.NotifyPullRequestSynchronized(doer, pr)
10792
}
10893
}
109-
11094
}
11195

11296
addHeadRepoTasks(prs)

services/pull/review.go

+6-41
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ package pull
77

88
import (
99
"code.gitea.io/gitea/models"
10-
api "code.gitea.io/gitea/modules/structs"
11-
"code.gitea.io/gitea/modules/webhook"
10+
"code.gitea.io/gitea/modules/notification"
1211
)
1312

1413
// CreateReview creates a new review based on opts
@@ -18,7 +17,9 @@ func CreateReview(opts models.CreateReviewOptions) (*models.Review, error) {
1817
return nil, err
1918
}
2019

21-
return review, reviewHook(review)
20+
notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil)
21+
22+
return review, nil
2223
}
2324

2425
// UpdateReview updates a review
@@ -28,43 +29,7 @@ func UpdateReview(review *models.Review) error {
2829
return err
2930
}
3031

31-
return reviewHook(review)
32-
}
33-
34-
func reviewHook(review *models.Review) error {
35-
var reviewHookType models.HookEventType
36-
37-
switch review.Type {
38-
case models.ReviewTypeApprove:
39-
reviewHookType = models.HookEventPullRequestApproved
40-
case models.ReviewTypeComment:
41-
reviewHookType = models.HookEventPullRequestComment
42-
case models.ReviewTypeReject:
43-
reviewHookType = models.HookEventPullRequestRejected
44-
default:
45-
// unsupported review webhook type here
46-
return nil
47-
}
48-
49-
pr := review.Issue.PullRequest
32+
notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil)
5033

51-
if err := pr.LoadIssue(); err != nil {
52-
return err
53-
}
54-
55-
mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo)
56-
if err != nil {
57-
return err
58-
}
59-
return webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{
60-
Action: api.HookIssueSynchronized,
61-
Index: review.Issue.Index,
62-
PullRequest: pr.APIFormat(),
63-
Repository: review.Issue.Repo.APIFormat(mode),
64-
Sender: review.Reviewer.APIFormat(),
65-
Review: &api.ReviewPayload{
66-
Type: string(reviewHookType),
67-
Content: review.Content,
68-
},
69-
})
34+
return nil
7035
}

0 commit comments

Comments
 (0)