Skip to content

Commit 7fdba2a

Browse files
committed
Merge branch 'also_auto-merge_on_review_updates' of github.com:6543-forks/gitea into 6543-forks-also_auto-merge_on_review_updates
2 parents d4ec6b3 + 1b568b2 commit 7fdba2a

File tree

4 files changed

+49
-6
lines changed

4 files changed

+49
-6
lines changed

routers/api/v1/repo/pull_review.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ 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"
1920
"code.gitea.io/gitea/services/context"
2021
"code.gitea.io/gitea/services/convert"
2122
issue_service "code.gitea.io/gitea/services/issue"
@@ -376,6 +377,11 @@ func CreatePullReview(ctx *context.APIContext) {
376377
return
377378
}
378379

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+
379385
// convert response
380386
apiReview, err := convert.ToPullReview(ctx, review, ctx.Doer)
381387
if err != nil {
@@ -464,6 +470,11 @@ func SubmitPullReview(ctx *context.APIContext) {
464470
return
465471
}
466472

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+
467478
// convert response
468479
apiReview, err := convert.ToPullReview(ctx, review, ctx.Doer)
469480
if err != nil {
@@ -880,7 +891,7 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors
880891
ctx.Error(http.StatusForbidden, "", "Must be repo admin")
881892
return
882893
}
883-
review, _, isWrong := prepareSingleReview(ctx)
894+
review, pr, isWrong := prepareSingleReview(ctx)
884895
if isWrong {
885896
return
886897
}
@@ -890,7 +901,12 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors
890901
return
891902
}
892903

893-
_, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss, dismissPriors)
904+
if pr.Issue.IsClosed {
905+
ctx.Error(http.StatusForbidden, "", "not need to dismiss this review because this pr is closed")
906+
return
907+
}
908+
909+
comm, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss, dismissPriors)
894910
if err != nil {
895911
if pull_service.IsErrDismissRequestOnClosedPR(err) {
896912
ctx.Error(http.StatusForbidden, "", err)
@@ -900,6 +916,9 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors
900916
return
901917
}
902918

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

routers/web/repo/pull_review.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ 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"
1920
"code.gitea.io/gitea/services/context"
2021
"code.gitea.io/gitea/services/context/upload"
2122
"code.gitea.io/gitea/services/forms"
@@ -269,6 +270,17 @@ func SubmitReview(ctx *context.Context) {
269270
}
270271
return
271272
}
273+
274+
// as a missing / blocking reviews could have blocked a pending automerge let's recheck
275+
if reviewType == issues_model.ReviewTypeApprove {
276+
pr, err := issue.GetPullRequest(ctx)
277+
if err != nil {
278+
ctx.ServerError("GetPullRequest", err)
279+
return
280+
}
281+
automerge.MergeScheduledPullRequest(pr)
282+
}
283+
272284
ctx.JSONRedirect(fmt.Sprintf("%s/pulls/%d#%s", ctx.Repo.RepoLink, issue.Index, comm.HashTag()))
273285
}
274286

@@ -285,6 +297,9 @@ func DismissReview(ctx *context.Context) {
285297
return
286298
}
287299

300+
// as reviews could have blocked a pending automerge let's recheck
301+
automerge.MergeScheduledPullRequest(comm.Issue.PullRequest)
302+
288303
ctx.Redirect(fmt.Sprintf("%s/pulls/%d#%s", ctx.Repo.RepoLink, comm.Issue.Index, comm.HashTag()))
289304
}
290305

services/automerge/automerge.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ func RemoveScheduledAutoMerge(ctx context.Context, doer *user_model.User, pull *
9595
})
9696
}
9797

98-
// MergeScheduledPullRequest merges a previously scheduled pull request when all checks succeeded
99-
func MergeScheduledPullRequest(ctx context.Context, sha string, repo *repo_model.Repository) error {
98+
// MergeScheduledPullRequestsBySha merges a previously scheduled pull request(s) when all checks succeeded
99+
func MergeScheduledPullRequestsBySha(ctx context.Context, sha string, repo *repo_model.Repository) error {
100100
pulls, err := getPullRequestsByHeadSHA(ctx, sha, repo, func(pr *issues_model.PullRequest) bool {
101101
return !pr.HasMerged && pr.CanAutoMerge()
102102
})
@@ -111,6 +111,15 @@ func MergeScheduledPullRequest(ctx context.Context, sha string, repo *repo_model
111111
return nil
112112
}
113113

114+
// MergeScheduledPullRequest merges a previously scheduled pull request when all checks succeeded
115+
func MergeScheduledPullRequest(pull *issues_model.PullRequest) {
116+
if pull == nil || pull.HasMerged || !pull.CanAutoMerge() {
117+
return
118+
}
119+
120+
addToQueue(pull, pull.HeadCommitID)
121+
}
122+
114123
func getPullRequestsByHeadSHA(ctx context.Context, sha string, repo *repo_model.Repository, filter func(*issues_model.PullRequest) bool) (map[int64]*issues_model.PullRequest, error) {
115124
gitRepo, err := gitrepo.OpenRepository(ctx, repo)
116125
if err != nil {

services/repository/commitstatus/commitstatus.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato
117117
}
118118

119119
if status.State.IsSuccess() {
120-
if err := automerge.MergeScheduledPullRequest(ctx, sha, repo); err != nil {
121-
return fmt.Errorf("MergeScheduledPullRequest[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err)
120+
if err := automerge.MergeScheduledPullRequestsBySha(ctx, sha, repo); err != nil {
121+
return fmt.Errorf("MergeScheduledPullRequestsBySha[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err)
122122
}
123123
}
124124

0 commit comments

Comments
 (0)