prune: handle branches that track missing branches
Series of steps:
* Create a local "b1" branch with `repo start b1` that tracks a remote
branch (totally fine)
* Manually create a local "b2" branch with `git branch --track b1 b2`
that tracks the local "b1" (uh-oh...)
* Delete the local "b1" branch manually or via `repo prune` (....)
* Try to process the "b2" branch with `repo prune`
Since b2 tracks a branch that no longer exists, everything blows up
at this point as we try to probe the non-existent ref. Instead, we
should flag this as unknown and leave it up to the user to resolve.
This probably could come up if a local branch was tracking a remote
branch that was deleted from the server, and users ran something like
`repo sync --prune` which cleaned up the remote refs.
Bug: https://crbug.com/gerrit/11485
Change-Id: I6b6b6041943944b8efa6e2ad0b8b10f13a75a5c2
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/236793
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Reviewed-by: Kirtika Ruchandani <kirtika@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/subcmds/prune.py b/subcmds/prune.py
index dc8b8c9..ff2fba1 100644
--- a/subcmds/prune.py
+++ b/subcmds/prune.py
@@ -51,11 +51,16 @@
out.project('project %s/' % project.relpath)
out.nl()
- commits = branch.commits
- date = branch.date
- print('%s %-33s (%2d commit%s, %s)' % (
+ print('%s %-33s ' % (
branch.name == project.CurrentBranch and '*' or ' ',
- branch.name,
+ branch.name), end='')
+
+ if not branch.base_exists:
+ print('(ignoring: tracking branch is gone: %s)' % (branch.base,))
+ else:
+ commits = branch.commits
+ date = branch.date
+ print('(%2d commit%s, %s)' % (
len(commits),
len(commits) != 1 and 's' or ' ',
date))