Read about our upcoming Code of Conduct on this issue

This instance will be upgraded to Heptapod 0.28.1 on 2022-01-26 at 16:00 UTC+1 (a few minutes of down time)

Commit 9d41126d authored by Manuel Jacob's avatar Manuel Jacob
Browse files

rebase: consider rewrite.empty-successor configuration

This adds support for the recently added rewrite.empty-successor configuration.
parent a391d0710f22
......@@ -206,6 +206,9 @@ class rebaseruntime(object):
self.backupf = ui.configbool(b'rewrite', b'backup-bundle')
self.keepf = opts.get(b'keep', False)
self.keepbranchesf = opts.get(b'keepbranches', False)
self.skipemptysuccessorf = rewriteutil.skip_empty_successor(
repo.ui, b'rebase'
self.obsoletenotrebased = {}
self.obsoletewithoutsuccessorindestination = set()
self.inmemory = inmemory
......@@ -530,7 +533,10 @@ class rebaseruntime(object):
for c in self.extrafns:
c(ctx, extra)
destphase = max(ctx.phase(), phases.draft)
overrides = {(b'phases', b'new-commit'): destphase}
overrides = {
(b'phases', b'new-commit'): destphase,
(b'ui', b'allowemptycommit'): not self.skipemptysuccessorf,
with repo.ui.configoverride(overrides, b'rebase'):
if self.inmemory:
newnode = commitmemorynode(
......@@ -650,6 +656,14 @@ class rebaseruntime(object):
if newnode is not None:
self.state[rev] = repo[newnode].rev()
ui.debug(b'rebased as %s\n' % short(newnode))
if repo[newnode].isempty():
b'note: created empty successor for %s, its '
b'destination already has all its changes\n'
% desc
if not self.collapsef:
......@@ -1896,7 +1896,8 @@ Alias definitions for revsets. See :hg:`help revsets` for details.
operations. If set to ``skip``, the successor is not created. If set to
``keep``, the empty successor is created and kept.
Currently, no command considers this configuration. (EXPERIMENTAL)
Currently, only the rebase command considers this configuration.
$ cat << EOF >> $HGRCPATH
> [extensions]
> rebase=
> [alias]
> tglog = log -G -T "{rev} '{desc}'\n"
$ hg init
$ echo a > a; hg add a; hg ci -m a
$ echo b > b; hg add b; hg ci -m b1
$ hg up 0 -q
$ echo b > b; hg add b; hg ci -m b2 -q
$ hg tglog
@ 2 'b2'
| o 1 'b1'
o 0 'a'
With rewrite.empty-successor=skip, b2 is skipped because it would become empty.
$ hg rebase -s 2 -d 1 --config rewrite.empty-successor=skip --dry-run
starting dry-run rebase; repository will not be changed
rebasing 2:6e2aad5e0f3c "b2" (tip)
note: not rebasing 2:6e2aad5e0f3c "b2" (tip), its destination already has all its changes
dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase
With rewrite.empty-successor=keep, b2 will be recreated although it became empty.
$ hg rebase -s 2 -d 1 --config rewrite.empty-successor=keep
rebasing 2:6e2aad5e0f3c "b2" (tip)
note: created empty successor for 2:6e2aad5e0f3c "b2" (tip), its destination already has all its changes
saved backup bundle to $TESTTMP/.hg/strip-backup/6e2aad5e0f3c-7d7c8801-rebase.hg
$ hg tglog
@ 2 'b2'
o 1 'b1'
o 0 'a'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment