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