mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Delete local branch if it exists (#6497)
Signed-off-by: jolheiser <john.olheiser@gmail.com>
This commit is contained in:
		| @@ -54,6 +54,38 @@ func (repo *Repository) CheckoutNewBranch(oldBranch, newBranch string) error { | |||||||
| 	return checkoutNewBranch(repo.RepoPath(), repo.LocalCopyPath(), oldBranch, newBranch) | 	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 | // Branch holds the branch information | ||||||
| type Branch struct { | type Branch struct { | ||||||
| 	Path string | 	Path string | ||||||
|   | |||||||
| @@ -71,6 +71,12 @@ func DeleteBranchPost(ctx *context.Context) { | |||||||
| 		return | 		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)) | 	ctx.Flash.Success(ctx.Tr("repo.branch.deletion_success", branchName)) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user