Skip to content

Commit 7562393

Browse files
committed
refactor delete head branch of pull request
1 parent 6d79d8a commit 7562393

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed

services/automerge/automerge.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
access_model "code.gitea.io/gitea/models/perm/access"
1616
pull_model "code.gitea.io/gitea/models/pull"
1717
repo_model "code.gitea.io/gitea/models/repo"
18-
"code.gitea.io/gitea/models/unit"
1918
user_model "code.gitea.io/gitea/models/user"
2019
"code.gitea.io/gitea/modules/git"
2120
"code.gitea.io/gitea/modules/gitrepo"
@@ -307,16 +306,8 @@ func handlePullRequestAutoMerge(pullID int64, sha string) {
307306
}
308307

309308
if pr.Flow == issues_model.PullRequestFlowGithub && scheduledPRM.DeleteBranchAfterMerge {
310-
perm, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer)
311-
if err != nil {
312-
log.Error("GetUserRepoPermission %-v: %v", pr.HeadRepo, err)
313-
return
314-
}
315-
316-
if perm.CanWrite(unit.TypeCode) { // default branch and branch protection will be checked in DeleteBranch
317-
if err := repo_service.DeleteBranch(ctx, doer, pr.HeadRepo, headGitRepo, pr.HeadBranch); err != nil {
318-
log.Error("deleteBranch after automerge for pull[%d] failed: %v", pr.ID, err)
319-
}
309+
if err := repo_service.DeletePullRequestHeadBranch(ctx, pr, doer, headGitRepo); err != nil {
310+
log.Error("DeletePullRequestHeadBranch: %v", err)
320311
}
321312
}
322313
}

services/repository/branch.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import (
1414
"code.gitea.io/gitea/models/db"
1515
git_model "code.gitea.io/gitea/models/git"
1616
issues_model "code.gitea.io/gitea/models/issues"
17+
access_model "code.gitea.io/gitea/models/perm/access"
1718
repo_model "code.gitea.io/gitea/models/repo"
19+
"code.gitea.io/gitea/models/unit"
1820
user_model "code.gitea.io/gitea/models/user"
1921
"code.gitea.io/gitea/modules/cache"
2022
"code.gitea.io/gitea/modules/git"
@@ -29,6 +31,7 @@ import (
2931
"code.gitea.io/gitea/modules/util"
3032
webhook_module "code.gitea.io/gitea/modules/webhook"
3133
notify_service "code.gitea.io/gitea/services/notify"
34+
pull_service "code.gitea.io/gitea/services/pull"
3235
files_service "code.gitea.io/gitea/services/repository/files"
3336

3437
"xorm.io/builder"
@@ -460,12 +463,22 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_m
460463

461464
// enmuerates all branch related errors
462465
var (
463-
ErrBranchIsDefault = errors.New("branch is default")
466+
ErrBranchIsDefault = errors.New("branch is default")
467+
ErrInsufficientAccess = errors.New("insufficient access")
464468
)
465469

466470
// DeleteBranch delete branch
467471
func DeleteBranch(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, gitRepo *git.Repository, branchName string) error {
468-
err := repo.MustNotBeArchived()
472+
perm, err := access_model.GetUserRepoPermission(ctx, repo, doer)
473+
if err != nil {
474+
return err
475+
}
476+
477+
if !perm.CanWrite(unit.TypeCode) {
478+
return ErrInsufficientAccess
479+
}
480+
481+
err = repo.MustNotBeArchived()
469482
if err != nil {
470483
return err
471484
}
@@ -528,6 +541,23 @@ func DeleteBranch(ctx context.Context, doer *user_model.User, repo *repo_model.R
528541
return nil
529542
}
530543

544+
func DeletePullRequestHeadBranch(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.User, headGitRepo *git.Repository) error {
545+
if err := pull_service.RetargetChildrenOnMerge(ctx, doer, pr); err != nil {
546+
return err
547+
}
548+
549+
if err := DeleteBranch(ctx, doer, pr.HeadRepo, headGitRepo, pr.HeadBranch); err != nil {
550+
return err
551+
}
552+
553+
if err := issues_model.AddDeletePRBranchComment(ctx, doer, pr.BaseRepo, pr.IssueID, pr.HeadBranch); err != nil {
554+
// Do not fail here as branch has already been deleted
555+
log.Error("AddDeletePRBranchComment: %v", err)
556+
}
557+
558+
return nil
559+
}
560+
531561
type BranchSyncOptions struct {
532562
RepoID int64
533563
}

0 commit comments

Comments
 (0)