next: solve the issue of `next` get confused by split
authorSushil khanchi <sushilkhanchi97@gmail.com>
Tue, 06 Nov 2018 10:41:50 +0530
changeset 4252 a07cd1d076bb
parent 4251 a5ec7652c4f4
child 4253 35dac5aadcfc
next: solve the issue of `next` get confused by split This patch solve a problem of next command which get confused by split. Let me describe how it was getting confused: Initial state of repo: A---B---C After splitting B to (B1,B2): @ A---B1---B2 \ ---B---C X * (note: C is orphan; checkedout to B1) Lets make an amend on B1: @ B1' / A---B1---B2 \ X * \ ---B---C X * Now, if run `hg next` (--evolve is True by default now): $ it would give you choice to choose from B2 and C thinking that C could also be a possbile children for B1, instead of stablizing B2 on B1. I fixed this problem by filtering those aspiring children which can be stablized on one of the aspiring children itself. Changes made in test-prev-next.t shows the changed expected behaviour.
CHANGELOG
hgext3rd/evolve/__init__.py
tests/test-prev-next.t
--- a/CHANGELOG	Tue Nov 06 15:10:56 2018 +0530
+++ b/CHANGELOG	Tue Nov 06 10:41:50 2018 +0530
@@ -6,6 +6,7 @@
 
   * push: have `--publish` overrule the `auto-publish` config
   * next: evolve aspiring children by default (use --no-evolve to skip)
+  * next: pick lower part of a split as destination
 
 8.3.2 - in progress
 -------------------
--- a/hgext3rd/evolve/__init__.py	Tue Nov 06 15:10:56 2018 +0530
+++ b/hgext3rd/evolve/__init__.py	Tue Nov 06 10:41:50 2018 +0530
@@ -1146,6 +1146,16 @@
             filtered.update(repo[c] for c in aspchildren
                             if repo[c].topic() != topic)
             aspchildren = [ctx for ctx in aspchildren if ctx not in filtered]
+
+        # To catch and prevent the case when `next` would get confused by split,
+        # lets filter those aspiring children which can be stablized on one of
+        # the aspiring children itself.
+        aspirants = set(aspchildren)
+        for aspchild in aspchildren:
+            possdests = evolvecmd._possibledestination(repo, aspchild)
+            if possdests & aspirants:
+                filtered.add(aspchild)
+        aspchildren = [ctx for ctx in aspchildren if ctx not in filtered]
         if aspchildren:
             needevolve = True
 
--- a/tests/test-prev-next.t	Tue Nov 06 15:10:56 2018 +0530
+++ b/tests/test-prev-next.t	Tue Nov 06 10:41:50 2018 +0530
@@ -484,8 +484,8 @@
   use 'hg resolve' to retry unresolved file merges
   [2] added bar
 
-Add test which shows that `next` command get confused by split:
----------------------------------------------------------------
+Add test which shows that now `next` command does not get confused by split:
+----------------------------------------------------------------------------
   $ cd ..
   $ mkdir nextconfused
   $ cd nextconfused
@@ -584,13 +584,6 @@
   $ hg next --evolve << EOF
   > q
   > EOF
-  ambiguous next (unstable) changeset, choose one to evolve and update:
-  0: [fdc998261dcb] C
-  1: [279f6cab32b5] B
-  q: quit the prompt
-  enter the index of the revision you want to select: q
-  ambiguous next (unstable) changeset:
-  [2] C
-  [4] B
-  (run 'hg evolve --rev REV' on one of them)
-  [1]
+  move:[4] B
+  atop:[5] B modified
+  working directory now at 1b434459c7e7