--- a/tests/test-topic-stack.t Mon Sep 04 12:41:30 2017 +0200
+++ b/tests/test-topic-stack.t Sat Sep 09 22:32:44 2017 +0530
@@ -550,3 +550,227 @@
^ c_D
t1: c_f
t0^ c_e (base)
+
+case involving a merge
+----------------------
+
+ $ cd ..
+ $ hg init stack-gap-merge
+ $ cd stack-gap-merge
+
+ $ echo aaa > aaa
+ $ hg commit -Am 'c_A'
+ adding aaa
+ $ hg topic red
+ $ echo bbb > bbb
+ $ hg commit -Am 'c_B'
+ adding bbb
+ $ echo ccc > ccc
+ $ hg commit -Am 'c_C'
+ adding ccc
+ $ hg topic blue
+ $ echo ddd > ddd
+ $ hg commit -Am 'c_D'
+ adding ddd
+ $ hg up 'desc("c_B")'
+ switching to topic red
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ echo eee > eee
+ $ hg commit -Am 'c_E'
+ adding eee
+ $ echo fff > fff
+ $ hg commit -Am 'c_F'
+ adding fff
+ $ hg topic blue
+ $ echo ggg > ggg
+ $ hg commit -Am 'c_G'
+ adding ggg
+ $ hg up 'desc("c_D")'
+ 2 files updated, 0 files merged, 3 files removed, 0 files unresolved
+ $ hg topic red
+ $ hg merge 'desc("c_G")'
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg commit -Am 'c_H'
+ $ hg topic blue
+ $ echo iii > iii
+ $ hg ci -Am 'c_I'
+ adding iii
+
+ $ hg log -G
+ @ 8 default {blue} draft c_I
+ |
+ o 7 default {red} draft c_H
+ |\
+ | o 6 default {blue} draft c_G
+ | |
+ | o 5 default {red} draft c_F
+ | |
+ | o 4 default {red} draft c_E
+ | |
+ o | 3 default {blue} draft c_D
+ | |
+ o | 2 default {red} draft c_C
+ |/
+ o 1 default {red} draft c_B
+ |
+ o 0 default {} draft c_A
+
+
+ $ hg stack red
+ ### topic: red (3 heads)
+ ### branch: default, 6 behind
+ t5: c_C
+ t2^ c_B (base)
+ t4: c_F
+ t3: c_E
+ t2: c_B
+ ^ c_A
+ t1: c_H
+ t0^ c_D (base)
+ $ hg stack blue
+ ### topic: blue (3 heads)
+ ### branch: default, ambigious rebase destination
+ t3: c_D
+ ^ c_C
+ t2: c_G
+ ^ c_F
+ t1@ c_I (current)
+ t0^ c_H (base)
+
+Even with some obsolete and orphan changesets
+
+(the ordering of each branch of "blue" change because their hash change. we
+should stabilize this eventuelly)
+
+ $ hg up 'desc("c_B")'
+ switching to topic red
+ 0 files updated, 0 files merged, 6 files removed, 0 files unresolved
+ $ hg commit --amend --user test2
+ $ hg up 'desc("c_C")'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg commit --amend --user test2
+ $ hg up 'desc("c_D")'
+ switching to topic blue
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg commit --amend --user test2
+
+ $ hg log -G --rev 'sort(all(), "topo")'
+ @ 11 default {blue} draft c_D
+ |
+ | o 8 default {blue} draft c_I
+ | |
+ | o 7 default {red} draft c_H
+ | |\
+ | | o 6 default {blue} draft c_G
+ | | |
+ | | o 5 default {red} draft c_F
+ | | |
+ | | o 4 default {red} draft c_E
+ | | |
+ | x | 3 default {blue} draft c_D
+ |/ /
+ x / 2 default {red} draft c_C
+ |/
+ | o 10 default {red} draft c_C
+ |/
+ x 1 default {red} draft c_B
+ |
+ | o 9 default {red} draft c_B
+ |/
+ o 0 default {} draft c_A
+
+
+ $ hg stack red
+ ### topic: red (3 heads)
+ ### branch: default, ambigious rebase destination
+ t5$ c_H (unstable)
+ ^ c_D
+ t4$ c_C (unstable)
+ t1^ c_B (base)
+ t3$ c_F (unstable)
+ t2$ c_E (unstable)
+ t1: c_B
+ t0^ c_A (base)
+ $ hg stack blue
+ ### topic: blue (3 heads)
+ ### branch: default, ambigious rebase destination
+ t3$ c_G (unstable)
+ ^ c_F
+ t2$ c_I (unstable)
+ ^ c_H
+ t1$ c_D (current unstable)
+ t0^ c_C (base)
+
+more obsolescence
+
+ $ hg up 'max(desc("c_H"))'
+ switching to topic red
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg commit --amend --user test3
+ $ hg up 'max(desc("c_G"))'
+ switching to topic blue
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ hg commit --amend --user test3
+ $ hg up 'max(desc("c_B"))'
+ switching to topic red
+ 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
+ $ hg commit --amend --user test3
+ $ hg up 'max(desc("c_C"))'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg commit --amend --user test3
+ $ hg up 'max(desc("c_D"))'
+ switching to topic blue
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg commit --amend --user test3
+
+ $ hg log -G --rev 'sort(all(), "topo")'
+ @ 16 default {blue} draft c_D
+ |
+ | o 13 default {blue} draft c_G
+ | |
+ | | o 12 default {red} draft c_H
+ | | |\
+ | | | | o 8 default {blue} draft c_I
+ | | | | |
+ | | +---x 7 default {red} draft c_H
+ | | | |/
+ | +---x 6 default {blue} draft c_G
+ | | |
+ | o | 5 default {red} draft c_F
+ | | |
+ | o | 4 default {red} draft c_E
+ | | |
+ +---x 3 default {blue} draft c_D
+ | |
+ x | 2 default {red} draft c_C
+ |/
+ | o 15 default {red} draft c_C
+ |/
+ x 1 default {red} draft c_B
+ |
+ | o 14 default {red} draft c_B
+ |/
+ o 0 default {} draft c_A
+
+
+ $ hg stack red
+ ### topic: red (3 heads)
+ ### branch: default, ambigious rebase destination
+ t5$ c_H (unstable)
+ ^ c_D
+ t4$ c_F (unstable)
+ t3$ c_E (unstable)
+ t1^ c_B (base)
+ t2$ c_C (unstable)
+ t1: c_B
+ t0^ c_A (base)
+ $ hg stack blue
+ ### topic: blue (3 heads)
+ ### branch: default, ambigious rebase destination
+ t3$ c_I (unstable)
+ ^ c_H
+ t2$ c_G (unstable)
+ ^ c_F
+ t1$ c_D (current unstable)
+ t0^ c_C (base)