diff options
author | Mike Frysinger <vapier@google.com> | 2019-09-11 18:43:17 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2019-11-16 19:55:02 +0000 |
commit | 6da17751ca4e3b90834ca763f448ddc39b32651b (patch) | |
tree | 4962f9913b689de734d3d11e981d3a2e18841504 /subcmds/prune.py | |
parent | 2ba5a1e96347e735b12998c057a6c1eed79712e9 (diff) | |
download | git-repo-6da17751ca4e3b90834ca763f448ddc39b32651b.tar.gz |
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>
Diffstat (limited to 'subcmds/prune.py')
-rw-r--r-- | subcmds/prune.py | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/subcmds/prune.py b/subcmds/prune.py index dc8b8c9d..ff2fba1d 100644 --- a/subcmds/prune.py +++ b/subcmds/prune.py | |||
@@ -51,11 +51,16 @@ class Prune(PagedCommand): | |||
51 | out.project('project %s/' % project.relpath) | 51 | out.project('project %s/' % project.relpath) |
52 | out.nl() | 52 | out.nl() |
53 | 53 | ||
54 | commits = branch.commits | 54 | print('%s %-33s ' % ( |
55 | date = branch.date | ||
56 | print('%s %-33s (%2d commit%s, %s)' % ( | ||
57 | branch.name == project.CurrentBranch and '*' or ' ', | 55 | branch.name == project.CurrentBranch and '*' or ' ', |
58 | branch.name, | 56 | branch.name), end='') |
57 | |||
58 | if not branch.base_exists: | ||
59 | print('(ignoring: tracking branch is gone: %s)' % (branch.base,)) | ||
60 | else: | ||
61 | commits = branch.commits | ||
62 | date = branch.date | ||
63 | print('(%2d commit%s, %s)' % ( | ||
59 | len(commits), | 64 | len(commits), |
60 | len(commits) != 1 and 's' or ' ', | 65 | len(commits) != 1 and 's' or ' ', |
61 | date)) | 66 | date)) |