summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2020-08-19 22:35:06 +0100
committerGitHub <noreply@github.com>2020-08-19 17:35:06 -0400
commita5440fcb1ef7af8b1b3a828e30dc6af60f0744b2 (patch)
tree32fcda1f7dd91a0ff46fb9cd0e76e33aebce348f
parent1701d57fb2763cf8ab7e1d6ebeecccea85c5f987 (diff)
downloadgitea-a5440fcb1ef7af8b1b3a828e30dc6af60f0744b2.tar.gz
gitea-a5440fcb1ef7af8b1b3a828e30dc6af60f0744b2.zip
Report error if API merge is not allowed (#12528)
#12496 demonstrated that the API merge needs to return some information as to why a merge has been disallowed with a status code 422. This PR ensures that a reason is always returned. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv>
-rw-r--r--routers/api/v1/repo/pull.go16
1 files changed, 13 insertions, 3 deletions
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 21cc048a69..126815839d 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -759,8 +759,18 @@ func MergePullRequest(ctx *context.APIContext, form auth.MergePullRequestForm) {
return
}
- if !pr.CanAutoMerge() || pr.HasMerged || pr.IsWorkInProgress() {
- ctx.Status(http.StatusMethodNotAllowed)
+ if !pr.CanAutoMerge() {
+ ctx.Error(http.StatusMethodNotAllowed, "PR not in mergeable state", "Please try again later")
+ return
+ }
+
+ if pr.HasMerged {
+ ctx.Error(http.StatusMethodNotAllowed, "PR already merged", "")
+ return
+ }
+
+ if pr.IsWorkInProgress() {
+ ctx.Error(http.StatusMethodNotAllowed, "PR is a work in progress", "Work in progress PRs cannot be merged")
return
}
@@ -812,7 +822,7 @@ func MergePullRequest(ctx *context.APIContext, form auth.MergePullRequestForm) {
if err := pull_service.Merge(pr, ctx.User, ctx.Repo.GitRepo, models.MergeStyle(form.Do), message); err != nil {
if models.IsErrInvalidMergeStyle(err) {
- ctx.Status(http.StatusMethodNotAllowed)
+ ctx.Error(http.StatusMethodNotAllowed, "Invalid merge style", fmt.Errorf("%s is not allowed an allowed merge style for this repository", models.MergeStyle(form.Do)))
return
} else if models.IsErrMergeConflicts(err) {
conflictError := err.(models.ErrMergeConflicts)