Skip to content

Commit 7ba4d00

Browse files
committed
Use notify to trigger auto merge check
1 parent 798a194 commit 7ba4d00

File tree

5 files changed

+51
-31
lines changed

5 files changed

+51
-31
lines changed

models/issues/review.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,14 @@ func (r *Review) LoadCodeComments(ctx context.Context) (err error) {
155155
if r.CodeComments != nil {
156156
return err
157157
}
158-
if err = r.loadIssue(ctx); err != nil {
158+
if err = r.LoadIssue(ctx); err != nil {
159159
return err
160160
}
161161
r.CodeComments, err = fetchCodeCommentsByReview(ctx, r.Issue, nil, r, false)
162162
return err
163163
}
164164

165-
func (r *Review) loadIssue(ctx context.Context) (err error) {
165+
func (r *Review) LoadIssue(ctx context.Context) (err error) {
166166
if r.Issue != nil {
167167
return err
168168
}
@@ -199,7 +199,7 @@ func (r *Review) LoadReviewerTeam(ctx context.Context) (err error) {
199199

200200
// LoadAttributes loads all attributes except CodeComments
201201
func (r *Review) LoadAttributes(ctx context.Context) (err error) {
202-
if err = r.loadIssue(ctx); err != nil {
202+
if err = r.LoadIssue(ctx); err != nil {
203203
return err
204204
}
205205
if err = r.LoadCodeComments(ctx); err != nil {

routers/api/v1/repo/pull_review.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
api "code.gitea.io/gitea/modules/structs"
1717
"code.gitea.io/gitea/modules/web"
1818
"code.gitea.io/gitea/routers/api/v1/utils"
19-
"code.gitea.io/gitea/services/automerge"
2019
"code.gitea.io/gitea/services/context"
2120
"code.gitea.io/gitea/services/convert"
2221
issue_service "code.gitea.io/gitea/services/issue"
@@ -377,11 +376,6 @@ func CreatePullReview(ctx *context.APIContext) {
377376
return
378377
}
379378

380-
// as a missing / blocking reviews could have blocked a pending automerge let's recheck
381-
if reviewType == issues_model.ReviewTypeApprove {
382-
automerge.MergeScheduledPullRequest(pr)
383-
}
384-
385379
// convert response
386380
apiReview, err := convert.ToPullReview(ctx, review, ctx.Doer)
387381
if err != nil {
@@ -470,11 +464,6 @@ func SubmitPullReview(ctx *context.APIContext) {
470464
return
471465
}
472466

473-
// as a missing / blocking reviews could have blocked a pending automerge let's recheck
474-
if review.Type == issues_model.ReviewTypeApprove {
475-
automerge.MergeScheduledPullRequest(pr)
476-
}
477-
478467
// convert response
479468
apiReview, err := convert.ToPullReview(ctx, review, ctx.Doer)
480469
if err != nil {
@@ -905,7 +894,7 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors
905894
return
906895
}
907896

908-
comm, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss, dismissPriors)
897+
_, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss, dismissPriors)
909898
if err != nil {
910899
if pull_service.IsErrDismissRequestOnClosedPR(err) {
911900
ctx.Error(http.StatusForbidden, "", err)
@@ -915,9 +904,6 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors
915904
return
916905
}
917906

918-
// as reviews could have blocked a pending automerge let's recheck
919-
automerge.MergeScheduledPullRequest(comm.Issue.PullRequest)
920-
921907
if review, err = issues_model.GetReviewByID(ctx, review.ID); err != nil {
922908
ctx.Error(http.StatusInternalServerError, "GetReviewByID", err)
923909
return

routers/web/repo/pull_review.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"code.gitea.io/gitea/modules/log"
1717
"code.gitea.io/gitea/modules/setting"
1818
"code.gitea.io/gitea/modules/web"
19-
"code.gitea.io/gitea/services/automerge"
2019
"code.gitea.io/gitea/services/context"
2120
"code.gitea.io/gitea/services/context/upload"
2221
"code.gitea.io/gitea/services/forms"
@@ -271,15 +270,6 @@ func SubmitReview(ctx *context.Context) {
271270
return
272271
}
273272

274-
// as a missing / blocking reviews could have blocked a pending automerge let's recheck
275-
if reviewType == issues_model.ReviewTypeApprove {
276-
if err := issue.LoadPullRequest(ctx); err != nil {
277-
ctx.ServerError("GetPullRequest", err)
278-
return
279-
}
280-
automerge.MergeScheduledPullRequest(issue.PullRequest)
281-
}
282-
283273
ctx.JSONRedirect(fmt.Sprintf("%s/pulls/%d#%s", ctx.Repo.RepoLink, issue.Index, comm.HashTag()))
284274
}
285275

@@ -296,9 +286,6 @@ func DismissReview(ctx *context.Context) {
296286
return
297287
}
298288

299-
// as reviews could have blocked a pending automerge let's recheck
300-
automerge.MergeScheduledPullRequest(comm.Issue.PullRequest)
301-
302289
ctx.Redirect(fmt.Sprintf("%s/pulls/%d#%s", ctx.Repo.RepoLink, comm.Issue.Index, comm.HashTag()))
303290
}
304291

services/automerge/automerge.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"code.gitea.io/gitea/modules/log"
2323
"code.gitea.io/gitea/modules/process"
2424
"code.gitea.io/gitea/modules/queue"
25+
notify_service "code.gitea.io/gitea/services/notify"
2526
pull_service "code.gitea.io/gitea/services/pull"
2627
)
2728

@@ -30,6 +31,8 @@ var prAutoMergeQueue *queue.WorkerPoolQueue[string]
3031

3132
// Init runs the task queue to that handles auto merges
3233
func Init() error {
34+
notify_service.RegisterNotifier(NewNotifier())
35+
3336
prAutoMergeQueue = queue.CreateUniqueQueue(graceful.GetManager().ShutdownContext(), "pr_auto_merge", handler)
3437
if prAutoMergeQueue == nil {
3538
return fmt.Errorf("unable to create pr_auto_merge queue")

services/automerge/notify.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package automerge
5+
6+
import (
7+
"context"
8+
9+
issues_model "code.gitea.io/gitea/models/issues"
10+
user_model "code.gitea.io/gitea/models/user"
11+
"code.gitea.io/gitea/modules/log"
12+
notify_service "code.gitea.io/gitea/services/notify"
13+
)
14+
15+
type automergeNotifier struct {
16+
notify_service.NullNotifier
17+
}
18+
19+
var _ notify_service.Notifier = &automergeNotifier{}
20+
21+
// NewNotifier create a new automergeNotifier notifier
22+
func NewNotifier() notify_service.Notifier {
23+
return &automergeNotifier{}
24+
}
25+
26+
func (n *automergeNotifier) PullRequestReview(ctx context.Context, pr *issues_model.PullRequest, review *issues_model.Review, comment *issues_model.Comment, mentions []*user_model.User) {
27+
// as a missing / blocking reviews could have blocked a pending automerge let's recheck
28+
if review.Type == issues_model.ReviewTypeApprove {
29+
MergeScheduledPullRequest(pr)
30+
}
31+
}
32+
33+
func (n *automergeNotifier) PullReviewDismiss(ctx context.Context, doer *user_model.User, review *issues_model.Review, comment *issues_model.Comment) {
34+
if err := review.LoadIssue(ctx); err != nil {
35+
log.Error("LoadIssue: %v", err)
36+
return
37+
}
38+
if err := review.Issue.LoadPullRequest(ctx); err != nil {
39+
log.Error("LoadPullRequest: %v", err)
40+
return
41+
}
42+
// as reviews could have blocked a pending automerge let's recheck
43+
MergeScheduledPullRequest(review.Issue.PullRequest)
44+
}

0 commit comments

Comments
 (0)