Browse Source

Delete local branch if it exists (#6497)

Signed-off-by: jolheiser <john.olheiser@gmail.com>
tags/v1.9.0-rc1
John Olheiser 5 years ago
parent
commit
aa02463ded
2 changed files with 38 additions and 0 deletions
  1. 32
    0
      models/repo_branch.go
  2. 6
    0
      routers/repo/branch.go

+ 32
- 0
models/repo_branch.go View File

@@ -54,6 +54,38 @@ func (repo *Repository) CheckoutNewBranch(oldBranch, newBranch string) error {
return checkoutNewBranch(repo.RepoPath(), repo.LocalCopyPath(), oldBranch, newBranch)
}

// deleteLocalBranch deletes a branch from a local repo cache
// First checks out default branch to avoid trying to delete the currently checked out branch
func deleteLocalBranch(localPath, defaultBranch, deleteBranch string) error {
if !com.IsExist(localPath) {
return nil
}

if !git.IsBranchExist(localPath, deleteBranch) {
return nil
}

// Must NOT have branch currently checked out
// Checkout default branch first
if err := git.Checkout(localPath, git.CheckoutOptions{
Timeout: time.Duration(setting.Git.Timeout.Pull) * time.Second,
Branch: defaultBranch,
}); err != nil {
return fmt.Errorf("git checkout %s: %v", defaultBranch, err)
}

cmd := git.NewCommand("branch")
cmd.AddArguments("-D")
cmd.AddArguments(deleteBranch)
_, err := cmd.RunInDir(localPath)
return err
}

// DeleteLocalBranch deletes a branch from the local repo
func (repo *Repository) DeleteLocalBranch(branchName string) error {
return deleteLocalBranch(repo.LocalCopyPath(), repo.DefaultBranch, branchName)
}

// Branch holds the branch information
type Branch struct {
Path string

+ 6
- 0
routers/repo/branch.go View File

@@ -71,6 +71,12 @@ func DeleteBranchPost(ctx *context.Context) {
return
}

// Delete branch in local copy if it exists
if err := ctx.Repo.Repository.DeleteLocalBranch(branchName); err != nil {
ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", branchName))
return
}

ctx.Flash.Success(ctx.Tr("repo.branch.deletion_success", branchName))
}


Loading…
Cancel
Save