diff --git a/git_rebase_update.py b/git_rebase_update.py index 37f306658..b0c5bf4dc 100755 --- a/git_rebase_update.py +++ b/git_rebase_update.py @@ -74,6 +74,7 @@ def remove_empty_branches(branch_tree): tag_set = git.tags() ensure_root_checkout = git.once(lambda: git.run('checkout', git.root())) + deletions = set() downstreams = collections.defaultdict(list) for branch, parent in git.topo_iter(branch_tree, top_down=False): downstreams[parent].append(branch) @@ -84,6 +85,9 @@ def remove_empty_branches(branch_tree): logging.debug('branch %s merged to %s', branch, parent) for down in downstreams[branch]: + if down in deletions: + continue + if parent in tag_set: git.set_branch_config(down, 'remote', '.') git.set_branch_config(down, 'merge', 'refs/tags/%s' % parent) @@ -94,6 +98,7 @@ def remove_empty_branches(branch_tree): print ('Reparented %s to track %s (was tracking %s)' % (down, parent, branch)) + deletions.add(branch) print git.run('branch', '-d', branch) diff --git a/tests/git_rebase_update_test.py b/tests/git_rebase_update_test.py index 64f7fd3b7..0dea37e60 100755 --- a/tests/git_rebase_update_test.py +++ b/tests/git_rebase_update_test.py @@ -116,6 +116,9 @@ class GitRebaseUpdateTest(git_test_utils.GitRepoReadWriteTestBase): output, _ = self.repo.capture_stdio(self.reup.main) self.assertIn('Cannot rebase-update', output) + self.repo.run(self.nb.main, ['empty_branch']) + self.repo.run(self.nb.main, ['--upstream_current', 'empty_branch2']) + self.repo.git('checkout', 'branch_K') output, _ = self.repo.capture_stdio(self.reup.main) @@ -126,6 +129,8 @@ class GitRebaseUpdateTest(git_test_utils.GitRepoReadWriteTestBase): self.assertIn('Rebasing: foobar', output) self.assertIn('Rebasing: sub_K', output) self.assertIn('Deleted branch branch_G', output) + self.assertIn('Deleted branch empty_branch', output) + self.assertIn('Deleted branch empty_branch2', output) self.assertIn('Reparented branch_K to track origin/master', output) self.assertSchema("""