@@ -13,7 +13,6 @@ import (
1313 "time"
1414
1515 activities_model "code.gitea.io/gitea/models/activities"
16- git_model "code.gitea.io/gitea/models/git"
1716 issues_model "code.gitea.io/gitea/models/issues"
1817 access_model "code.gitea.io/gitea/models/perm/access"
1918 pull_model "code.gitea.io/gitea/models/pull"
@@ -938,7 +937,7 @@ func MergePullRequest(ctx *context.APIContext) {
938937 } else if errors .Is (err , pull_service .ErrNoPermissionToMerge ) {
939938 ctx .APIError (http .StatusMethodNotAllowed , "User not allowed to merge PR" )
940939 } else if errors .Is (err , pull_service .ErrHasMerged ) {
941- ctx .APIError (http .StatusMethodNotAllowed , "" )
940+ ctx .APIError (http .StatusMethodNotAllowed , "The PR is already merged " )
942941 } else if errors .Is (err , pull_service .ErrIsWorkInProgress ) {
943942 ctx .APIError (http .StatusMethodNotAllowed , "Work in progress PRs cannot be merged" )
944943 } else if errors .Is (err , pull_service .ErrNotMergeableState ) {
@@ -989,8 +988,14 @@ func MergePullRequest(ctx *context.APIContext) {
989988 message += "\n \n " + form .MergeMessageField
990989 }
991990
991+ deleteBranchAfterMerge , err := pull_service .ShouldDeleteBranchAfterMerge (ctx , form .DeleteBranchAfterMerge , ctx .Repo .Repository , pr )
992+ if err != nil {
993+ ctx .APIErrorInternal (err )
994+ return
995+ }
996+
992997 if form .MergeWhenChecksSucceed {
993- scheduled , err := automerge .ScheduleAutoMerge (ctx , ctx .Doer , pr , repo_model .MergeStyle (form .Do ), message , form . DeleteBranchAfterMerge )
998+ scheduled , err := automerge .ScheduleAutoMerge (ctx , ctx .Doer , pr , repo_model .MergeStyle (form .Do ), message , deleteBranchAfterMerge )
994999 if err != nil {
9951000 if pull_model .IsErrAlreadyScheduledToAutoMerge (err ) {
9961001 ctx .APIError (http .StatusConflict , err )
@@ -1035,47 +1040,10 @@ func MergePullRequest(ctx *context.APIContext) {
10351040 }
10361041 log .Trace ("Pull request merged: %d" , pr .ID )
10371042
1038- // for agit flow, we should not delete the agit reference after merge
1039- if form .DeleteBranchAfterMerge && pr .Flow == issues_model .PullRequestFlowGithub {
1040- // check permission even it has been checked in repo_service.DeleteBranch so that we don't need to
1041- // do RetargetChildrenOnMerge
1042- if err := repo_service .CanDeleteBranch (ctx , pr .HeadRepo , pr .HeadBranch , ctx .Doer ); err == nil {
1043- // Don't cleanup when there are other PR's that use this branch as head branch.
1044- exist , err := issues_model .HasUnmergedPullRequestsByHeadInfo (ctx , pr .HeadRepoID , pr .HeadBranch )
1045- if err != nil {
1046- ctx .APIErrorInternal (err )
1047- return
1048- }
1049- if exist {
1050- ctx .Status (http .StatusOK )
1051- return
1052- }
1053-
1054- var headRepo * git.Repository
1055- if ctx .Repo != nil && ctx .Repo .Repository != nil && ctx .Repo .Repository .ID == pr .HeadRepoID && ctx .Repo .GitRepo != nil {
1056- headRepo = ctx .Repo .GitRepo
1057- } else {
1058- headRepo , err = gitrepo .OpenRepository (ctx , pr .HeadRepo )
1059- if err != nil {
1060- ctx .APIErrorInternal (err )
1061- return
1062- }
1063- defer headRepo .Close ()
1064- }
1065-
1066- if err := repo_service .DeleteBranch (ctx , ctx .Doer , pr .HeadRepo , headRepo , pr .HeadBranch , pr ); err != nil {
1067- switch {
1068- case git .IsErrBranchNotExist (err ):
1069- ctx .APIErrorNotFound (err )
1070- case errors .Is (err , repo_service .ErrBranchIsDefault ):
1071- ctx .APIError (http .StatusForbidden , errors .New ("can not delete default branch" ))
1072- case errors .Is (err , git_model .ErrBranchIsProtected ):
1073- ctx .APIError (http .StatusForbidden , errors .New ("branch protected" ))
1074- default :
1075- ctx .APIErrorInternal (err )
1076- }
1077- return
1078- }
1043+ if deleteBranchAfterMerge {
1044+ if err = repo_service .DeleteBranchAfterMerge (ctx , ctx .Doer , pr .ID , nil ); err != nil {
1045+ // no way to tell users that what error happens, and the PR has been merged, so ignore the error
1046+ log .Debug ("DeleteBranchAfterMerge: pr %d, err: %v" , pr .ID , err )
10791047 }
10801048 }
10811049
0 commit comments