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)) |
