@@ -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