diff options
author | zeripath <art27@cantab.net> | 2020-08-19 22:35:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-19 17:35:06 -0400 |
commit | a5440fcb1ef7af8b1b3a828e30dc6af60f0744b2 (patch) | |
tree | 32fcda1f7dd91a0ff46fb9cd0e76e33aebce348f | |
parent | 1701d57fb2763cf8ab7e1d6ebeecccea85c5f987 (diff) | |
download | gitea-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.go | 16 |
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) |