--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-stack-branch.t Wed Jun 28 02:45:57 2017 +0200
@@ -0,0 +1,257 @@
+
+ $ . "$TESTDIR/testlib/topic_setup.sh"
+
+Initial setup
+
+ $ cat << EOF >> $HGRCPATH
+ > [ui]
+ > logtemplate = {rev} {branch} \{{get(namespaces, "topics")}} {phase} {desc|firstline}\n
+ > [experimental]
+ > evolution=createmarkers,exchange,allowunstable
+ > EOF
+
+ $ hg init main
+ $ cd main
+ $ hg branch other
+ marked working directory as branch other
+ (branches are permanent and global, did you want a bookmark?)
+ $ echo aaa > aaa
+ $ hg add aaa
+ $ hg commit -m c_a
+ $ echo aaa > bbb
+ $ hg add bbb
+ $ hg commit -m c_b
+ $ hg branch foo
+ marked working directory as branch foo
+ $ echo aaa > ccc
+ $ hg add ccc
+ $ hg commit -m c_c
+ $ echo aaa > ddd
+ $ hg add ddd
+ $ hg commit -m c_d
+ $ echo aaa > eee
+ $ hg add eee
+ $ hg commit -m c_e
+ $ echo aaa > fff
+ $ hg add fff
+ $ hg commit -m c_f
+ $ hg log -G
+ @ 5 foo {} draft c_f
+ |
+ o 4 foo {} draft c_e
+ |
+ o 3 foo {} draft c_d
+ |
+ o 2 foo {} draft c_c
+ |
+ o 1 other {} draft c_b
+ |
+ o 0 other {} draft c_a
+
+
+Check that topic without any parent does not crash --list
+---------------------------------------------------------
+
+ $ hg up other
+ 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+ $ hg stack
+ ### topic: None
+ ### branch: other
+ b2@ c_b (current)
+ b1: c_a
+ $ hg phase --public 'branch("other")'
+ $ hg up foo
+ 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Simple test
+-----------
+
+'hg stack' list all changeset in the topic
+
+ $ hg branch
+ foo
+ $ hg stack
+ ### topic: None
+ ### branch: foo
+ b4@ c_f (current)
+ b3: c_e
+ b2: c_d
+ b1: c_c
+ ^ c_b
+
+Test "t#" reference
+-------------------
+
+ $ hg up b2
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ hg up foo
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg up b42
+ abort: cannot resolve "b42": branch "foo" has only 4 changesets
+ [255]
+ $ hg up b2
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ hg summary
+ parent: 3:f61adbacd17a
+ c_d
+ branch: foo
+ commit: (clean)
+ update: 2 new changesets (update)
+ phases: 4 draft
+
+Case with some of the branch unstable
+------------------------------------
+
+ $ echo bbb > ddd
+ $ hg commit --amend
+ $ hg log -G
+ @ 7 foo {} draft c_d
+ |
+ | o 5 foo {} draft c_f
+ | |
+ | o 4 foo {} draft c_e
+ | |
+ | x 3 foo {} draft c_d
+ |/
+ o 2 foo {} draft c_c
+ |
+ o 1 other {} public c_b
+ |
+ o 0 other {} public c_a
+
+ $ hg stack
+ ### topic: None
+ ### branch: foo
+ b4$ c_f (unstable)
+ b3$ c_e (unstable)
+ b2@ c_d (current)
+ b1: c_c
+ ^ c_b
+ $ hg up b3
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg stack
+ ### topic: None
+ ### branch: foo
+ b4$ c_f (unstable)
+ b3$ c_e (current unstable)
+ b2: c_d
+ b1: c_c
+ ^ c_b
+ $ hg up b2
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+Also test the revset:
+
+ $ hg log -r 'stack()'
+ abort: no active topic to list
+ [255]
+
+Case with multiple heads on the topic
+-------------------------------------
+
+Make things linear again
+
+ $ hg rebase -s 'desc(c_e)' -d 'desc(c_d) - obsolete()'
+ rebasing 4:4f2a69f6d380 "c_e"
+ rebasing 5:913c298d8b0a "c_f"
+ $ hg log -G
+ o 9 foo {} draft c_f
+ |
+ o 8 foo {} draft c_e
+ |
+ @ 7 foo {} draft c_d
+ |
+ o 2 foo {} draft c_c
+ |
+ o 1 other {} public c_b
+ |
+ o 0 other {} public c_a
+
+
+Create the second branch
+
+ $ hg up 'desc(c_d)'
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo aaa > ggg
+ $ hg add ggg
+ $ hg commit -m c_g
+ created new head
+ $ echo aaa > hhh
+ $ hg add hhh
+ $ hg commit -m c_h
+ $ hg log -G
+ @ 11 foo {} draft c_h
+ |
+ o 10 foo {} draft c_g
+ |
+ | o 9 foo {} draft c_f
+ | |
+ | o 8 foo {} draft c_e
+ |/
+ o 7 foo {} draft c_d
+ |
+ o 2 foo {} draft c_c
+ |
+ o 1 other {} public c_b
+ |
+ o 0 other {} public c_a
+
+
+Test output
+
+ $ hg stack
+ ### topic: None (2 heads)
+ ### branch: foo
+ b6: c_f
+ b5: c_e
+ b2^ c_d (base)
+ b4@ c_h (current)
+ b3: c_g
+ b2: c_d
+ b1: c_c
+ ^ c_b
+
+Case with multiple heads on the topic with unstability involved
+---------------------------------------------------------------
+
+We amend the message to make sure the display base pick the right changeset
+
+ $ hg up 'desc(c_d)'
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ echo ccc > ddd
+ $ hg commit --amend -m 'c_D'
+ $ hg rebase -d . -s 'desc(c_g)'
+ rebasing 10:2ebb6e48ab8a "c_g"
+ rebasing 11:634f38e27a1d "c_h"
+ $ hg log -G
+ o 15 foo {} draft c_h
+ |
+ o 14 foo {} draft c_g
+ |
+ @ 13 foo {} draft c_D
+ |
+ | o 9 foo {} draft c_f
+ | |
+ | o 8 foo {} draft c_e
+ | |
+ | x 7 foo {} draft c_d
+ |/
+ o 2 foo {} draft c_c
+ |
+ o 1 other {} public c_b
+ |
+ o 0 other {} public c_a
+
+
+ $ hg stack
+ ### topic: None (2 heads)
+ ### branch: foo
+ b6$ c_f (unstable)
+ b5$ c_e (unstable)
+ b2^ c_D (base)
+ b4: c_h
+ b3: c_g
+ b2@ c_D (current)
+ b1: c_c
+ ^ c_b
+