tests/test-stack-branch.t
author Boris Feld <boris.feld@octobus.net>
Thu, 29 Jun 2017 16:49:33 +0200
changeset 2684 90e11985d0cc
parent 2682 a6e3c2fcb1d7
child 2691 9b68a2083dac
permissions -rw-r--r--
topic: exclude public and topic changeset from branch stack Stack use-case is to show the current work in progress, which are symbolized by the phase draft and secret phase. Moreover showing public changesets in stack output when displaying current branch would display a lot of changesets for long-lived branches and would be quite useless. We also exclude topic changeset form the stack since they already exist on their own stack. getstack revsets didn't needed update when displaying a topic as when a changeset become public, its topic is no longer relevant.


  $ . "$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
  ### 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
  ### 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
  ### 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
  ### 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()'
  2 foo {} draft c_c
  7 foo {} draft c_d
  4 foo {} draft c_e
  5 foo {} draft c_f

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
  ### branch: foo (2 heads)
  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
  ### branch: foo (2 heads)
  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

Check that stack doesn't show draft changesets on a branch
----------------------------------------------------------

  $ hg stack
  ### branch: foo (2 heads)
  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
  $ hg phase --public b1
  $ hg stack
  ### branch: foo (2 heads)
  b5$ c_f (unstable)
  b4$ c_e (unstable)
  b1^ c_D (base)
  b3: c_h
  b2: c_g
  b1@ c_D (current)
    ^ c_c

Check that stack doesn't show changeset with a topic
----------------------------------------------------

  $ hg topic --rev b4::b5 sometopic
  changed topic on 2 changes
  please run hg evolve --rev "topic(sometopic)" now
  $ hg stack
  ### branch: foo
  b3: c_h
  b2: c_g
  b1@ c_D (current)
    ^ c_c