branching: merge with stable
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 12 Dec 2017 03:21:46 +0100
changeset 3284 ee71cc4eff21
parent 3283 039c4b8dc3ed (current diff)
parent 3278 e4c0332ecee4 (diff)
child 3285 9f4d5b039002
child 3290 245f30245bf6
branching: merge with stable
CHANGELOG
--- a/CHANGELOG	Tue Dec 12 00:27:08 2017 +0530
+++ b/CHANGELOG	Tue Dec 12 03:21:46 2017 +0100
@@ -24,6 +24,7 @@
 
 Topic (0.5.2)
 
+  * fix behavior of `hg stack` in cases of split
   * makes code more resilient to partiel initialization
   * avoid over wrapping inside of long living process
 
--- a/hgext3rd/topic/stack.py	Tue Dec 12 00:27:08 2017 +0530
+++ b/hgext3rd/topic/stack.py	Tue Dec 12 03:21:46 2017 +0100
@@ -12,7 +12,11 @@
     obsolete,
     util,
 )
-from .evolvebits import builddependencies, _singlesuccessor
+from .evolvebits import (
+    _singlesuccessor,
+    MultipleSuccessorsError,
+    builddependencies,
+)
 
 short = node.short
 
@@ -285,7 +289,15 @@
         p1 = ctx.p1()
         p2 = ctx.p2()
         if p1.obsolete():
-            p1 = repo[_singlesuccessor(repo, p1)]
+            try:
+                p1 = repo[_singlesuccessor(repo, p1)]
+            except MultipleSuccessorsError as e:
+                successors = e.successorssets
+                if len(successors) > 1:
+                    # case of divergence which we don't handle yet
+                    raise
+                p1 = repo[successors[0][-1]]
+
         if p2.node() != node.nullid:
             entries.append((idxmap.get(p1.rev()), False, p1))
             entries.append((idxmap.get(p2.rev()), False, p2))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-topic-stack-complex.t	Tue Dec 12 03:21:46 2017 +0100
@@ -0,0 +1,135 @@
+Testing `hg stack` on complex cases when we have multiple successors because of
+divergence, split etc.
+  $ . "$TESTDIR/testlib/topic_setup.sh"
+
+Setup
+
+  $ cat << EOF >> $HGRCPATH
+  > [experimental]
+  > evolution = all
+  > [ui]
+  > interactive = True
+  > [extensions]
+  > show =
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
+
+  $ hg init test
+  $ cd test
+  $ echo foo > foo
+  $ hg add foo
+  $ hg ci -m "Added foo"
+  $ hg phase -r . --public
+  $ hg topic foo
+  marked working directory as topic: foo
+  $ echo a > a
+  $ echo b > b
+  $ hg ci -Aqm "Added a and b"
+  $ echo c > c
+  $ echo d > d
+  $ hg ci -Aqm "Added c and d"
+  $ echo e > e
+  $ echo f > f
+  $ hg ci -Aqm "Added e and f"
+  $ hg show work
+  @  f1d3 (foo) Added e and f
+  o  8e82 (foo) Added c and d
+  o  002b (foo) Added a and b
+  o  f360 Added foo
+
+Testing in case of split within the topic
+
+  $ hg stack
+  ### topic: foo
+  ### target: default (branch)
+  t3@ Added e and f (current)
+  t2: Added c and d
+  t1: Added a and b
+  t0^ Added foo (base)
+  $ hg prev
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  [2] Added c and d
+
+  $ echo 0 > num
+  $ cat > editor.sh << '__EOF__'
+  > NUM=$(cat num)
+  > NUM=`expr "$NUM" + 1`
+  > echo "$NUM" > num
+  > echo "split$NUM" > "$1"
+  > __EOF__
+  $ export HGEDITOR="\"sh\" \"editor.sh\""
+
+  $ hg split << EOF
+  > y
+  > y
+  > n
+  > y
+  > EOF
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  adding c
+  adding d
+  diff --git a/c b/c
+  new file mode 100644
+  examine changes to 'c'? [Ynesfdaq?] y
+  
+  @@ -0,0 +1,1 @@
+  +c
+  record change 1/2 to 'c'? [Ynesfdaq?] y
+  
+  diff --git a/d b/d
+  new file mode 100644
+  examine changes to 'd'? [Ynesfdaq?] n
+  
+  Done splitting? [yN] y
+
+  $ hg stack
+  ### topic: foo
+  ### target: default (branch)
+  t4$ Added e and f (unstable)
+  t3@ split2 (current)
+  t2: split1
+  t1: Added a and b
+  t0^ Added foo (base)
+
+  $ hg show work
+  @  5cce (foo) split2
+  o  f26c (foo) split1
+  | o  f1d3 (foo) Added e and f
+  | x  8e82 (foo) Added c and d
+  |/
+  o  002b (foo) Added a and b
+  o  f360 Added foo
+
+  $ hg prev
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [4] split1
+  $ echo foo > c
+  $ hg diff
+  diff -r f26c1b9addde c
+  --- a/c	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/c	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +1,1 @@
+  -c
+  +foo
+
+  $ hg amend
+  1 new orphan changesets
+  $ hg show work
+  @  7d94 (foo) split1
+  | o  5cce (foo) split2
+  | x  f26c (foo) split1
+  |/
+  | o  f1d3 (foo) Added e and f
+  | x  8e82 (foo) Added c and d
+  |/
+  o  002b (foo) Added a and b
+  o  f360 Added foo
+
+  $ hg stack
+  ### topic: foo (2 heads)
+  ### target: default (branch), 2 behind
+  t4$ Added e and f (unstable)
+  t3$ split2 (unstable)
+  t2@ split1 (current)
+  t1: Added a and b
+  t0^ Added foo (base)