diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -50,6 +50,27 @@ # The rollback command is dangerous. As a rule, don't use it. rollback = False +[alias] +# Move orphaned changesets to better places. +# Destination revset explanation: +# - max(roots(ALLSRC) & ::SRC)^ +# The obsoleted changeset that the SRC stack is based on. +# - successors(...)-obsolete() +# A non-obsoleted successor. Or an empty set (no successor). +# - max(...::) +# Get the top of the stack, so history is more linear. +# This is the rebase destination for SRC when there is a successor. +# - max(::((roots(ALLSRC) & ::SRC)^)-obsolete()) +# The first non-obsoleted changeset before the obsoleted changeset that the +# SRC stack is based on. +# This is the rebase destination for SRC when there is no successor. +# - first(A+B) +# Pick B if A is empty. +restack = rebase + -r 'orphan()-obsolete()' + -d 'first(max((successors(max(roots(ALLSRC) & ::SRC)^)-obsolete())::)+ + max(::((roots(ALLSRC) & ::SRC)^)-obsolete()))' + [commands] # Make `hg status` emit cwd-relative paths by default. status.relative = yes @@ -60,6 +81,9 @@ [diff] git = 1 + +[experimental] +rebase.multidest = 1 """ samplehgrcs = { diff --git a/tests/test-tweakdefaults-restack.t b/tests/test-tweakdefaults-restack.t new file mode 100644 --- /dev/null +++ b/tests/test-tweakdefaults-restack.t @@ -0,0 +1,80 @@ + $ cat >> $HGRCPATH< [ui] + > tweakdefaults=1 + > [extensions] + > drawdag=$TESTDIR/drawdag.py + > [experimental] + > stabilization=createmarkers allowunstable + > EOF + + $ hg init repo1 + $ cd repo1 + $ hg debugdrawdag <<'EOS' + > H I + > | | + > G E2 # rebase: E1 -> E2 + > | | + > E1 F # prune: F + > | | + > C D + > | | + > B1 B2 B3 # amend: B1 -> B2 -> B3 + > \ | / + > \|/ + > A1 A2 # amend: A1 -> A2 + > | | + > X Y + > EOS + $ hg restack + rebasing 6:799bf3a4122a "B3" (B3) + rebasing 8:288ec50c8e7e "D" (D) + rebasing 11:eccb0cc6c7e4 "E2" (E2) + rebasing 14:4d27b6814343 "I" (I tip) + rebasing 7:5c2d17df3d86 "C" (C) + rebasing 12:f2b51a466fe6 "G" (G) + rebasing 13:7aee36f22fb4 "H" (H) + $ hg log -G -T '{desc}' -r 'sort(all(), topo)' + o H + | + o G + | + o C + | + o I + | + o E2 + | + o D + | + o B3 + | + o A2 + | + | x I + | | + | x E2 + | | + | x F + | | + | x D + | | + | x B3 + | | + | | x H + | | | + | | x G + | | | + | | x E1 + | | | + | | x C + | | | + | | x B1 + | |/ + | | x B2 + | |/ + | x A1 + | | + o | Y + / + o X +