Patchwork D1047: tweakdefaults: add restack command

login
register
mail settings
Submitter phabricator
Date Oct. 13, 2017, 7:23 a.m.
Message ID <35115128afb62f7cb799113b408112fb@localhost.localdomain>
Download mbox | patch
Permalink /patch/24817/
State Not Applicable
Headers show

Comments

phabricator - Oct. 13, 2017, 7:23 a.m.
quark updated this revision to Diff 2665.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D1047?vs=2654&id=2665

REVISION DETAIL
  https://phab.mercurial-scm.org/D1047

AFFECTED FILES
  mercurial/ui.py
  tests/test-tweakdefaults-restack.t

CHANGE DETAILS




To: quark, #hg-reviewers
Cc: mercurial-devel

Patch

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<<EOF
+  > [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
+  
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 = {