@@ -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" 
@@ -989,25 +988,12 @@ func MergePullRequest(ctx *context.APIContext) {
989988		message  +=  "\n \n "  +  form .MergeMessageField 
990989	}
991990
992- 	prUnit , err  :=  ctx . Repo .Repository . GetUnit ( ctx ,  unit . TypePullRequests )
991+ 	deleteBranchAfterMerge , err  :=  pull_service . ShouldDeleteBranchAfterMerge ( ctx ,  form . DeleteBranchAfterMerge ,  ctx . Repo .Repository ,  pr )
993992	if  err  !=  nil  {
994993		ctx .APIErrorInternal (err )
995994		return 
996995	}
997996
998- 	// for agit flow, we should not delete the agit reference after merge 
999- 	// FIXME: old code has that comment above. Is that comment valid? What would go wrong if a agit branch is deleted after merge? 
1000- 	// * If a agit branch can be deleted after merge, then fix the comment and maybe other related code 
1001- 	// * If a agit branch should not be deleted, then we need to fix the logic and add more tests 
1002- 	deleteBranchAfterMerge  :=  pr .Flow  ==  issues_model .PullRequestFlowGithub 
1003- 	if  form .DeleteBranchAfterMerge  !=  nil  {
1004- 		// if the form field is defined, it takes precedence over the repo setting equivalent 
1005- 		deleteBranchAfterMerge  =  deleteBranchAfterMerge  &&  * form .DeleteBranchAfterMerge 
1006- 	} else  {
1007- 		// otherwise, we look at the repo setting to make the determination 
1008- 		deleteBranchAfterMerge  =  deleteBranchAfterMerge  &&  prUnit .PullRequestsConfig ().DefaultDeleteBranchAfterMerge 
1009- 	}
1010- 
1011997	if  form .MergeWhenChecksSucceed  {
1012998		scheduled , err  :=  automerge .ScheduleAutoMerge (ctx , ctx .Doer , pr , repo_model .MergeStyle (form .Do ), message , deleteBranchAfterMerge )
1013999		if  err  !=  nil  {
@@ -1055,45 +1041,9 @@ func MergePullRequest(ctx *context.APIContext) {
10551041	log .Trace ("Pull request merged: %d" , pr .ID )
10561042
10571043	if  deleteBranchAfterMerge  {
1058- 		// check permission even it has been checked in repo_service.DeleteBranch so that we don't need to 
1059- 		// do RetargetChildrenOnMerge 
1060- 		if  err  :=  repo_service .CanDeleteBranch (ctx , pr .HeadRepo , pr .HeadBranch , ctx .Doer ); err  ==  nil  {
1061- 			// Don't cleanup when there are other PR's that use this branch as head branch. 
1062- 			exist , err  :=  issues_model .HasUnmergedPullRequestsByHeadInfo (ctx , pr .HeadRepoID , pr .HeadBranch )
1063- 			if  err  !=  nil  {
1064- 				ctx .APIErrorInternal (err )
1065- 				return 
1066- 			}
1067- 			if  exist  {
1068- 				ctx .Status (http .StatusOK )
1069- 				return 
1070- 			}
1071- 
1072- 			var  headRepo  * git.Repository 
1073- 			if  ctx .Repo  !=  nil  &&  ctx .Repo .Repository  !=  nil  &&  ctx .Repo .Repository .ID  ==  pr .HeadRepoID  &&  ctx .Repo .GitRepo  !=  nil  {
1074- 				headRepo  =  ctx .Repo .GitRepo 
1075- 			} else  {
1076- 				headRepo , err  =  gitrepo .OpenRepository (ctx , pr .HeadRepo )
1077- 				if  err  !=  nil  {
1078- 					ctx .APIErrorInternal (err )
1079- 					return 
1080- 				}
1081- 				defer  headRepo .Close ()
1082- 			}
1083- 
1084- 			if  err  :=  repo_service .DeleteBranch (ctx , ctx .Doer , pr .HeadRepo , headRepo , pr .HeadBranch , pr ); err  !=  nil  {
1085- 				switch  {
1086- 				case  git .IsErrBranchNotExist (err ):
1087- 					ctx .APIErrorNotFound (err )
1088- 				case  errors .Is (err , repo_service .ErrBranchIsDefault ):
1089- 					ctx .APIError (http .StatusForbidden , errors .New ("can not delete default branch" ))
1090- 				case  errors .Is (err , git_model .ErrBranchIsProtected ):
1091- 					ctx .APIError (http .StatusForbidden , errors .New ("branch protected" ))
1092- 				default :
1093- 					ctx .APIErrorInternal (err )
1094- 				}
1095- 				return 
1096- 			}
1044+ 		// no way to tell users that what error happens, and the PR has been merged, so ignore the error 
1045+ 		if  err  =  repo_service .DeleteBranchAfterMerge (ctx , ctx .Doer , pr .ID , nil ); err  !=  nil  {
1046+ 			log .Debug ("DeleteBranchAfterMerge: pr %d, err: %v" , pr .ID , err )
10971047		}
10981048	}
10991049
0 commit comments