Skip to content

Commit c9d9ad6

Browse files
committed
delete remote tracking ref too
1 parent 4a30bb6 commit c9d9ad6

4 files changed

Lines changed: 21 additions & 0 deletions

File tree

cmd/sync.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,9 @@ func runSync(cfg *config.Config, opts *syncOptions) error {
417417
if err := git.DeleteBranch(name, true); err != nil {
418418
cfg.Warningf("Failed to delete %s: %v", name, err)
419419
} else {
420+
// Also remove the remote-tracking ref so that
421+
// `git checkout <name>` doesn't recreate the branch.
422+
_ = git.DeleteTrackingRef(remote, name)
420423
cfg.Successf("Pruned %s (merged)", name)
421424
pruned++
422425
}

internal/git/git.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,11 @@ func DeleteRemoteBranch(remote, branch string) error {
312312
return ops.DeleteRemoteBranch(remote, branch)
313313
}
314314

315+
// DeleteTrackingRef deletes a local remote-tracking ref (e.g. refs/remotes/origin/branch).
316+
func DeleteTrackingRef(remote, branch string) error {
317+
return ops.DeleteTrackingRef(remote, branch)
318+
}
319+
315320
// ResetHard resets the current branch to the given ref.
316321
func ResetHard(ref string) error {
317322
return ops.ResetHard(ref)

internal/git/gitops.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type Ops interface {
4848
DiffStatFiles(base, head string) ([]FileDiffStat, error)
4949
DeleteBranch(name string, force bool) error
5050
DeleteRemoteBranch(remote, branch string) error
51+
DeleteTrackingRef(remote, branch string) error
5152
ResetHard(ref string) error
5253
SetUpstreamTracking(branch, remote string) error
5354
MergeFF(target string) error
@@ -485,6 +486,10 @@ func (d *defaultOps) DeleteRemoteBranch(remote, branch string) error {
485486
return runSilent("push", remote, "--delete", branch)
486487
}
487488

489+
func (d *defaultOps) DeleteTrackingRef(remote, branch string) error {
490+
return runSilent("branch", "-dr", remote+"/"+branch)
491+
}
492+
488493
func (d *defaultOps) ResetHard(ref string) error {
489494
return runSilent("reset", "--hard", ref)
490495
}

internal/git/mock_ops.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type MockOps struct {
3636
DiffStatFilesFn func(string, string) ([]FileDiffStat, error)
3737
DeleteBranchFn func(string, bool) error
3838
DeleteRemoteBranchFn func(string, string) error
39+
DeleteTrackingRefFn func(string, string) error
3940
ResetHardFn func(string) error
4041
SetUpstreamTrackingFn func(string, string) error
4142
MergeFFFn func(string) error
@@ -287,6 +288,13 @@ func (m *MockOps) DeleteRemoteBranch(remote, branch string) error {
287288
return nil
288289
}
289290

291+
func (m *MockOps) DeleteTrackingRef(remote, branch string) error {
292+
if m.DeleteTrackingRefFn != nil {
293+
return m.DeleteTrackingRefFn(remote, branch)
294+
}
295+
return nil
296+
}
297+
290298
func (m *MockOps) ResetHard(ref string) error {
291299
if m.ResetHardFn != nil {
292300
return m.ResetHardFn(ref)

0 commit comments

Comments
 (0)