summaryrefslogtreecommitdiffstats
path: root/routers/api
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-06-07 21:13:40 +0200
committerGitHub <noreply@github.com>2020-06-07 20:13:40 +0100
commit5814079bf5fd2369f8720a94128533bad21d1b17 (patch)
treeadfb71874aae1402af740d5daf2d2599730cbf5d /routers/api
parent880ae454db47b7a736024df230d115f83a108b02 (diff)
downloadgitea-5814079bf5fd2369f8720a94128533bad21d1b17.tar.gz
gitea-5814079bf5fd2369f8720a94128533bad21d1b17.zip
Add option to API to update PullRequest base branch (#11666)
* EditPull: add option to change base Close #11552
Diffstat (limited to 'routers/api')
-rw-r--r--routers/api/v1/repo/pull.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 284c231628..921f61a612 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -464,6 +464,8 @@ func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) {
// "$ref": "#/responses/PullRequest"
// "403":
// "$ref": "#/responses/forbidden"
+ // "409":
+ // "$ref": "#/responses/error"
// "412":
// "$ref": "#/responses/error"
// "422":
@@ -590,6 +592,30 @@ func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) {
notification.NotifyIssueChangeStatus(ctx.User, issue, statusChangeComment, issue.IsClosed)
}
+ // change pull target branch
+ if len(form.Base) != 0 && form.Base != pr.BaseBranch {
+ if !ctx.Repo.GitRepo.IsBranchExist(form.Base) {
+ ctx.Error(http.StatusNotFound, "NewBaseBranchNotExist", fmt.Errorf("new base '%s' not exist", form.Base))
+ return
+ }
+ if err := pull_service.ChangeTargetBranch(pr, ctx.User, form.Base); err != nil {
+ if models.IsErrPullRequestAlreadyExists(err) {
+ ctx.Error(http.StatusConflict, "IsErrPullRequestAlreadyExists", err)
+ return
+ } else if models.IsErrIssueIsClosed(err) {
+ ctx.Error(http.StatusUnprocessableEntity, "IsErrIssueIsClosed", err)
+ return
+ } else if models.IsErrPullRequestHasMerged(err) {
+ ctx.Error(http.StatusConflict, "IsErrPullRequestHasMerged", err)
+ return
+ } else {
+ ctx.InternalServerError(err)
+ }
+ return
+ }
+ notification.NotifyPullRequestChangeTargetBranch(ctx.User, pr, form.Base)
+ }
+
// Refetch from database
pr, err = models.GetPullRequestByIndex(ctx.Repo.Repository.ID, pr.Index)
if err != nil {