diff options
author | zeripath <art27@cantab.net> | 2021-12-20 00:32:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-20 08:32:54 +0800 |
commit | e4e411821d985cf8f9007d9640909ab9ee271dd7 (patch) | |
tree | 11af3c3a933949d0561f1e292acd8296181a63db /routers/web | |
parent | b24a965b81d5aa4e7bd87c6a4c6370d7e0ec9a50 (diff) | |
download | gitea-e4e411821d985cf8f9007d9640909ab9ee271dd7.tar.gz gitea-e4e411821d985cf8f9007d9640909ab9ee271dd7.zip |
Abort merge if head has been updated before pressing merge (#18032)
* Abort merge if head has been updated before pressing merge
It is possible that a PR head may be pushed to between the merge page being shown
and the merge button being pressed. Pass the current expected head in as a parameter
and cancel the merge if it has changed.
Fix #18028
Signed-off-by: Andrew Thornton <art27@cantab.net>
* adjust swagger
Signed-off-by: Andrew Thornton <art27@cantab.net>
* fix test
Signed-off-by: Andrew Thornton <art27@cantab.net>
* placate lint
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'routers/web')
-rw-r--r-- | routers/web/repo/pull.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index 9445c1a48b..bf80a7e5df 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -933,7 +933,7 @@ func MergePullRequest(ctx *context.Context) { return } - if err = pull_service.Merge(pr, ctx.User, ctx.Repo.GitRepo, repo_model.MergeStyle(form.Do), message); err != nil { + if err = pull_service.Merge(pr, ctx.User, ctx.Repo.GitRepo, repo_model.MergeStyle(form.Do), form.HeadCommitID, message); err != nil { if models.IsErrInvalidMergeStyle(err) { ctx.Flash.Error(ctx.Tr("repo.pulls.invalid_merge_option")) ctx.Redirect(issue.Link()) @@ -976,6 +976,11 @@ func MergePullRequest(ctx *context.Context) { ctx.Flash.Error(ctx.Tr("repo.pulls.merge_out_of_date")) ctx.Redirect(issue.Link()) return + } else if models.IsErrSHADoesNotMatch(err) { + log.Debug("MergeHeadOutOfDate error: %v", err) + ctx.Flash.Error(ctx.Tr("repo.pulls.head_out_of_date")) + ctx.Redirect(issue.Link()) + return } else if git.IsErrPushRejected(err) { log.Debug("MergePushRejected error: %v", err) pushrejErr := err.(*git.ErrPushRejected) |