# HG changeset patch # User Pierre-Yves David # Date 1508766622 -7200 # Node ID c71e371c797b3539d0972eda687a9fbb679b17be # Parent add76a5eb1ae1f443bd00ab0dae1ab1b6a9573ec# Parent 9fa39195a4c90fa71012bab35ce47252ca8d0149 test-compat: merge mercurial-4.0 into mercurial-3.9 diff -r 9fa39195a4c9 -r c71e371c797b tests/test-discovery-obshashrange.t --- a/tests/test-discovery-obshashrange.t Mon Oct 23 15:50:21 2017 +0200 +++ b/tests/test-discovery-obshashrange.t Mon Oct 23 15:50:22 2017 +0200 @@ -90,33 +90,27 @@ * @0000000000000000000000000000000000000000 (*)> writing .hg/cache/tags2-visible with 0 tags (glob) * @0000000000000000000000000000000000000000 (*)> log -G exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 66f7d451a68b85ed82ff5fcc254daf50c74144bd (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 66f7d451a68b85ed82ff5fcc254daf50c74144bd exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 01241442b3c2bf3211e593b549c655ea65b295e3 (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 01241442b3c2bf3211e593b549c655ea65b295e3 --config experimental.obshashrange.max-revs=1 exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete cccccccccccccccccccccccccccccccccccccccc bebd167eb94d257ace0e814aeb98e6972ed2970d (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete cccccccccccccccccccccccccccccccccccccccc bebd167eb94d257ace0e814aeb98e6972ed2970d exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete dddddddddddddddddddddddddddddddddddddddd c8d03c1b5e94af74b772900c58259d2e08917735 (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete dddddddddddddddddddddddddddddddddddddddd c8d03c1b5e94af74b772900c58259d2e08917735 --config experimental.obshashrange.warm-cache=0 exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 4de32a90b66cd083ebf3c00b41277aa7abca51dd (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 2o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 4de32a90b66cd083ebf3c00b41277aa7abca51dd exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> blackbox (glob) $ rm .hg/blackbox.log @@ -303,7 +297,6 @@ ffffffffffffffffffffffffffffffffffffffff 45f8b879de922f6a6e620ba04205730335b6fc7e 0 (*) {'user': 'test'} (glob) $ hg blackbox * @0000000000000000000000000000000000000000 (*)> debugobsolete (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> up (glob) * @bebd167eb94d257ace0e814aeb98e6972ed2970d (*)> up exited 0 after *.?? seconds (glob) @@ -316,7 +309,6 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (1r, 0o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> commit -m foo exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete ffffffffffffffffffffffffffffffffffffffff 45f8b879de922f6a6e620ba04205730335b6fc7e (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache reset - new markers affect cached ranges (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) @@ -329,13 +321,11 @@ * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> writing .hg/cache/tags2-visible with 0 tags (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete 111111111111111aaaaaaaaa1111111111111111 66f7d451a68b85ed82ff5fcc254daf50c74144bd (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache reset - new markers affect cached ranges (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete 111111111111111aaaaaaaaa1111111111111111 66f7d451a68b85ed82ff5fcc254daf50c74144bd exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete 22222222222222222bbbbbbbbbbbbb2222222222 2dc09a01254db841290af0538aa52f6f52c776e3 (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> obshashcache reset - new markers affect cached ranges (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) @@ -385,17 +375,14 @@ $ hg -R ../server blackbox * @0000000000000000000000000000000000000000 (*)> debugobsolete --rev ::tip (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> writing .hg/cache/tags2-visible with 0 tags (glob) * @0000000000000000000000000000000000000000 (*)> -R ../server/ debugobsolete --rev ::tip exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete aaaaaaa11111111aaaaaaaaa1111111111111111 66f7d451a68b85ed82ff5fcc254daf50c74144bd (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> -R ../server debugobsolete aaaaaaa11111111aaaaaaaaa1111111111111111 66f7d451a68b85ed82ff5fcc254daf50c74144bd exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> debugobsolete bbbbbbb2222222222bbbbbbbbbbbbb2222222222 bebd167eb94d257ace0e814aeb98e6972ed2970d (glob) - * @0000000000000000000000000000000000000000 (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @0000000000000000000000000000000000000000 (*)> obshashcache reset - new markers affect cached ranges (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obshashrange in *.???? seconds (0r, 1o) (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (0r, 1o) (glob) @@ -415,7 +402,6 @@ dddddddddddddddddddddddddddddddddddddddd c8d03c1b5e94af74b772900c58259d2e08917735 0 (*) {'user': 'test'} (glob) $ hg blackbox * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> log -G exited 0 after *.?? seconds (glob) @@ -494,7 +480,6 @@ 1 66f7d451a68b 1 1 2 327c7dd73d29 $ hg blackbox * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete --rev ::6 (glob) - * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> alias 'debugobsolete' expands to 'debugobsolete -d '0 0'' (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> writing .hg/cache/tags2-visible with 0 tags (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobsolete --rev ::6 exited 0 after *.?? seconds (glob) * @45f8b879de922f6a6e620ba04205730335b6fc7e (*)> debugobshashrange --subranges --rev heads(all()) (glob) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-cycles.t --- a/tests/test-evolve-cycles.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,427 +0,0 @@ -Test that evolve related algorithms don't crash on obs markers cycles - -Global setup -============ - - $ . $TESTDIR/testlib/common.sh - $ cat >> $HGRCPATH < [ui] - > interactive = true - > [phases] - > publish=False - > [extensions] - > evolve = - > EOF - -Test with cycle -=============== - -Test setup ----------- - - $ hg init $TESTTMP/cycle - $ cd $TESTTMP/cycle - $ mkcommit ROOT - $ mkcommit A - $ mkcommit B - $ mkcommit C - $ hg log -G - @ changeset: 3:a8df460dbbfe - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C - | - o changeset: 2:c473644ee0e9 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B - | - o changeset: 1:2a34000d3544 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Create a cycle - $ hg prune -s "desc(B)" "desc(A)" - 1 changesets pruned - 2 new unstable changesets - $ hg prune -s "desc(C)" "desc(B)" - 1 changesets pruned - $ hg prune -s "desc(A)" "desc(C)" - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - working directory now at 2a34000d3544 - 1 changesets pruned - $ hg log --hidden -G - x changeset: 3:a8df460dbbfe - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C - | - x changeset: 2:c473644ee0e9 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B - | - @ changeset: 1:2a34000d3544 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - -Check that debugobshistory never crash on a cycle - - $ hg obslog "desc(A)" --hidden - @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | - x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob) - | - x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | - - $ hg obslog "desc(B)" --hidden - @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | - x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob) - | - x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | - - $ hg obslog "desc(C)" --hidden - @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | - x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob) - | - x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | - -Check that all option don't crash on a cycle either - - $ hg obslog "desc(C)" --hidden --all - @ 2a34000d3544 (1) A - | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | - x a8df460dbbfe (3) C - | rewritten(description, parent, content) as 2a34000d3544 by test (*) (glob) - | - x c473644ee0e9 (2) B - | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | - -Test with multiple cyles -======================== - -Test setup ----------- - - $ hg init $TESTTMP/multiple-cycle - $ cd $TESTTMP/multiple-cycle - $ mkcommit ROOT - $ mkcommit A - $ mkcommit B - $ mkcommit C - $ mkcommit D - $ mkcommit E - $ mkcommit F - $ hg log -G - @ changeset: 6:d9f908fde1a1 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: F - | - o changeset: 5:0da815c333f6 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: E - | - o changeset: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: D - | - o changeset: 3:a8df460dbbfe - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C - | - o changeset: 2:c473644ee0e9 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B - | - o changeset: 1:2a34000d3544 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Create a first cycle - $ hg prune -s "desc(B)" "desc(A)" - 1 changesets pruned - 5 new unstable changesets - $ hg prune -s "desc(C)" "desc(B)" - 1 changesets pruned - $ hg prune --split -s "desc(A)" -s "desc(D)" "desc(C)" - 1 changesets pruned -And create a second one - $ hg prune -s "desc(E)" "desc(D)" - 1 changesets pruned - $ hg prune -s "desc(F)" "desc(E)" - 1 changesets pruned - $ hg prune -s "desc(D)" "desc(F)" - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - working directory now at 868d2e0eb19c - 1 changesets pruned - $ hg log --hidden -G - x changeset: 6:d9f908fde1a1 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: F - | - x changeset: 5:0da815c333f6 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: E - | - @ changeset: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: D - | - x changeset: 3:a8df460dbbfe - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C - | - x changeset: 2:c473644ee0e9 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B - | - x changeset: 1:2a34000d3544 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - -Check that debugobshistory never crash on a cycle - - $ hg obslog "desc(D)" --hidden - x 0da815c333f6 (5) E - | rewritten(description, parent, content) as d9f908fde1a1 by test (*) (glob) - | - @ 868d2e0eb19c (4) D - |\ rewritten(description, parent, content) as 0da815c333f6 by test (*) (glob) - | | - | x d9f908fde1a1 (6) F - | | rewritten(description, parent, content) as 868d2e0eb19c by test (*) (glob) - | | - +---x 2a34000d3544 (1) A - | | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | | - x | a8df460dbbfe (3) C - | | rewritten(description, parent, content) as 2a34000d3544, 868d2e0eb19c by test (*) (glob) - | | - x | c473644ee0e9 (2) B - | | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | | -Check that all option don't crash either on a cycle - $ hg obslog --all --hidden "desc(F)" - x 0da815c333f6 (5) E - | rewritten(description, parent, content) as d9f908fde1a1 by test (*) (glob) - | - @ 868d2e0eb19c (4) D - |\ rewritten(description, parent, content) as 0da815c333f6 by test (*) (glob) - | | - | x d9f908fde1a1 (6) F - | | rewritten(description, parent, content) as 868d2e0eb19c by test (*) (glob) - | | - +---x 2a34000d3544 (1) A - | | rewritten(description, parent, content) as c473644ee0e9 by test (*) (glob) - | | - x | a8df460dbbfe (3) C - | | rewritten(description, parent, content) as 2a34000d3544, 868d2e0eb19c by test (*) (glob) - | | - x | c473644ee0e9 (2) B - | | rewritten(description, parent, content) as a8df460dbbfe by test (*) (glob) - | | -Check the json output is valid in this case - - $ hg obslog "desc(D)" --hidden --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "0da815c333f6" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "868d2e0eb19c", - "rev": 4, - "shortdescription": "D" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "868d2e0eb19c" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "d9f908fde1a1", - "rev": 6, - "shortdescription": "F" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "d9f908fde1a1" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "0da815c333f6", - "rev": 5, - "shortdescription": "E" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "2a34000d3544", - "868d2e0eb19c" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "a8df460dbbfe", - "rev": 3, - "shortdescription": "C" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "a8df460dbbfe" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "c473644ee0e9", - "rev": 2, - "shortdescription": "B" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "c473644ee0e9" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "2a34000d3544", - "rev": 1, - "shortdescription": "A" - } - ] - diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-effectflags.t --- a/tests/test-evolve-effectflags.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,275 +0,0 @@ -Test the 'effect-flags' feature - -Global setup -============ - - $ . $TESTDIR/testlib/common.sh - $ cat >> $HGRCPATH < [ui] - > interactive = true - > [phases] - > publish=False - > [extensions] - > evolve = - > rebase = - > [experimental] - > evolution.effect-flags = 1 - > EOF - - $ hg init $TESTTMP/effect-flags - $ cd $TESTTMP/effect-flags - $ mkcommit ROOT - -amend touching the description only ------------------------------------ - - $ mkcommit A0 - $ hg amend -m "A1" - -check result - - $ hg debugobsolete --rev . - 471f378eab4c5e25f6c77f785b27c936efb22874 fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e 0 (*) {'ef1': '1', 'user': 'test'} (glob) - $ hg obslog . - @ fdf9bde5129a (2) A1 - | - x 471f378eab4c (1) A0 - rewritten(description) as fdf9bde5129a by test (*) (glob) - - $ hg log --hidden -r "desc(A0)" - changeset: 1:471f378eab4c - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: A0 - - -amend touching the user only ----------------------------- - - $ mkcommit B0 - $ hg amend -u "bob " - -check result - - $ hg debugobsolete --rev . - ef4a313b1e0ade55718395d80e6b88c5ccd875eb 5485c92d34330dac9d7a63dc07e1e3373835b964 0 (*) {'ef1': '16', 'user': 'test'} (glob) - $ hg obslog . - @ 5485c92d3433 (4) B0 - | - x ef4a313b1e0a (3) B0 - rewritten(user) as 5485c92d3433 by test (*) (glob) - - $ hg log --hidden -r "ef4a313b1e0a" - changeset: 3:ef4a313b1e0a - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: B0 - - -amend touching the date only ----------------------------- - - $ mkcommit B1 - $ hg amend -d "42 0" - -check result - - $ hg debugobsolete --rev . - 2ef0680ff45038ac28c9f1ff3644341f54487280 4dd84345082e9e5291c2e6b3f335bbf8bf389378 0 (*) {'ef1': '32', 'user': 'test'} (glob) - $ hg obslog . - @ 4dd84345082e (6) B1 - | - x 2ef0680ff450 (5) B1 - rewritten(date) as 4dd84345082e by test (*) (glob) - - $ hg log --hidden -r "2ef0680ff450" - changeset: 5:2ef0680ff450 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: B1 - - -amend touching the branch only ----------------------------- - - $ mkcommit B2 - $ hg branch my-branch - marked working directory as branch my-branch - (branches are permanent and global, did you want a bookmark?) - $ hg amend - -check result - - $ hg debugobsolete --rev . - 4d1430a201c1ffbd8465dec75edd4a691a2d97ec 0 {bd3db8264ceebf1966319f5df3be7aac6acd1a8e} (*) {'ef1': '0', 'user': 'test'} (glob) - bd3db8264ceebf1966319f5df3be7aac6acd1a8e 14a01456e0574f0e0a0b15b2345486a6364a8d79 0 (*) {'ef1': '64', 'user': 'test'} (glob) - $ hg obslog . - @ 14a01456e057 (9) B2 - | - x bd3db8264cee (7) B2 - rewritten(branch) as 14a01456e057 by test (*) (glob) - - $ hg log --hidden -r "bd3db8264cee" - changeset: 7:bd3db8264cee - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: B2 - - - $ hg up default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - -rebase (parents change) ------------------------ - - $ mkcommit C0 - $ mkcommit D0 - $ hg rebase -r . -d 'desc(B0)' - rebasing 11:c85eff83a034 "D0" (tip) - -check result - - $ hg debugobsolete --rev . - c85eff83a0340efd9da52b806a94c350222f3371 da86aa2f19a30d6686b15cae15c7b6c908ec9699 0 (*) {'ef1': '4', 'user': 'test'} (glob) - $ hg obslog . - @ da86aa2f19a3 (12) D0 - | - x c85eff83a034 (11) D0 - rewritten(parent) as da86aa2f19a3 by test (*) (glob) - - $ hg log --hidden -r "c85eff83a034" - changeset: 11:c85eff83a034 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: D0 - - -amend touching the diff ------------------------ - - $ mkcommit E0 - $ echo 42 >> E0 - $ hg amend - -check result - - $ hg debugobsolete --rev . - d6f4d8b8d3c8cde990f13915bced7f92ce1cc54f 0 {ebfe0333e0d96f68a917afd97c0a0af87f1c3b5f} (*) {'ef1': '0', 'user': 'test'} (glob) - ebfe0333e0d96f68a917afd97c0a0af87f1c3b5f 75781fdbdbf58a987516b00c980bccda1e9ae588 0 (*) {'ef1': '8', 'user': 'test'} (glob) - $ hg obslog . - @ 75781fdbdbf5 (15) E0 - | - x ebfe0333e0d9 (13) E0 - rewritten(content) as 75781fdbdbf5 by test (*) (glob) - - $ hg log --hidden -r "ebfe0333e0d9" - changeset: 13:ebfe0333e0d9 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: E0 - - -amend with multiple effect (desc and meta) -------------------------------------------- - - $ mkcommit F0 - $ hg branch my-other-branch - marked working directory as branch my-other-branch - $ hg amend -m F1 -u "bob " -d "42 0" - -check result - - $ hg debugobsolete --rev . - 3b12912003b4e7aa6df6cded86255006c3c29d27 0 {fad47e5bd78e6aa4db1b5a0a1751bc12563655ff} (*) {'ef1': '0', 'user': 'test'} (glob) - fad47e5bd78e6aa4db1b5a0a1751bc12563655ff a94e0fd5f1c81d969381a76eb0d37ce499a44fae 0 (*) {'ef1': '113', 'user': 'test'} (glob) - $ hg obslog . - @ a94e0fd5f1c8 (18) F1 - | - x fad47e5bd78e (16) F0 - rewritten(description, user, date, branch) as a94e0fd5f1c8 by test (*) (glob) - - $ hg log --hidden -r "fad47e5bd78e" - changeset: 16:fad47e5bd78e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: F0 - - -rebase not touching the diff ----------------------------- - - $ cat << EOF > H0 - > 0 - > 1 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - > 8 - > 9 - > 10 - > EOF - $ hg add H0 - $ hg commit -m 'H0' - $ echo "H1" >> H0 - $ hg commit -m "H1" - $ hg up -r "desc(H0)" - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat << EOF > H0 - > H2 - > 0 - > 1 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - > 8 - > 9 - > 10 - > EOF - $ hg commit -m "H2" - created new head - $ hg rebase -s "desc(H1)" -d "desc(H2)" -t :merge3 - rebasing 20:b57fed8d8322 "H1" - merging H0 - $ hg obslog tip - o e509e2eb3df5 (22) H1 - | - x b57fed8d8322 (20) H1 - rewritten(parent) as e509e2eb3df5 by test (*) (glob) - - $ hg log --hidden -r "b57fed8d8322" - changeset: 20:b57fed8d8322 - branch: my-other-branch - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: H1 - -amend closing the branch should be detected as meta change ----------------------------------------------------------- - - $ hg branch closedbranch - marked working directory as branch closedbranch - $ mkcommit G0 - $ mkcommit I0 - $ hg commit --amend --close-branch - -check result - - $ hg obslog . - @ 12c6238b5e37 (26) I0 - | - x 2f599e54c1c6 (24) I0 - rewritten(meta) as 12c6238b5e37 by test (*) (glob) - - $ hg log --hidden -r "2f599e54c1c6" - changeset: 24:2f599e54c1c6 - branch: closedbranch - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: I0 - diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-obshistory-complex.t --- a/tests/test-evolve-obshistory-complex.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ -Global setup -============ - - $ . $TESTDIR/testlib/common.sh - $ cat >> $HGRCPATH < [ui] - > interactive = true - > [phases] - > publish=False - > [extensions] - > evolve = - > EOF - -Test obslog with split + fold + split -===================================== - -Test setup ----------- - - $ hg init $TESTTMP/splitfoldsplit - $ cd $TESTTMP/splitfoldsplit - $ mkcommit ROOT - $ mkcommit A - $ mkcommit B - $ mkcommit C - $ mkcommit D - $ mkcommit E - $ mkcommit F - $ hg log -G - @ changeset: 6:d9f908fde1a1 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: F - | - o changeset: 5:0da815c333f6 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: E - | - o changeset: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: D - | - o changeset: 3:a8df460dbbfe - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C - | - o changeset: 2:c473644ee0e9 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B - | - o changeset: 1:2a34000d3544 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Split commits two by two ------------------------- - - $ hg fold --exact -r 1 -r 2 --date "0 0" -m "fold0" - 2 changesets folded - 4 new unstable changesets - $ hg fold --exact -r 3 -r 4 --date "0 0" -m "fold1" - 2 changesets folded - $ hg fold --exact -r 5 -r 6 --date "0 0" -m "fold2" - 2 changesets folded - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - @ changeset: 9:100cc25b765f - | tag: tip - | parent: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fold2 - | - | o changeset: 8:d15d0ffc75f6 - | | parent: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: fold1 - | | - | | o changeset: 7:b868bc49b0a4 - | | | parent: 0:ea207398892e - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: fold0 - | | | - x | | changeset: 4:868d2e0eb19c - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: D - | | | - x | | changeset: 3:a8df460dbbfe - |/ / user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: C - | | - x | changeset: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B - | | - x | changeset: 1:2a34000d3544 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - -Then split ----------- - - $ hg split "desc(fold0)" -d "0 0" << EOF - > Y - > Y - > N - > N - > Y - > Y - > EOF - 0 files updated, 0 files merged, 6 files removed, 0 files unresolved - adding A - adding B - diff --git a/A b/A - new file mode 100644 - examine changes to 'A'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +A - record change 1/2 to 'A'? [Ynesfdaq?] Y - - diff --git a/B b/B - new file mode 100644 - examine changes to 'B'? [Ynesfdaq?] N - - created new head - Done splitting? [yN] N - diff --git a/B b/B - new file mode 100644 - examine changes to 'B'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +B - record this change to 'B'? [Ynesfdaq?] Y - - no more change to split - $ hg split "desc(fold1)" -d "0 0" << EOF - > Y - > Y - > N - > N - > Y - > Y - > EOF - 0 files updated, 0 files merged, 0 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 - - created new head - Done splitting? [yN] N - diff --git a/D b/D - new file mode 100644 - examine changes to 'D'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +D - record this change to 'D'? [Ynesfdaq?] Y - - no more change to split - $ hg split "desc(fold2)" -d "0 0" << EOF - > Y - > Y - > N - > N - > Y - > Y - > EOF - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - adding E - adding F - diff --git a/E b/E - new file mode 100644 - examine changes to 'E'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +E - record change 1/2 to 'E'? [Ynesfdaq?] Y - - diff --git a/F b/F - new file mode 100644 - examine changes to 'F'? [Ynesfdaq?] N - - created new head - Done splitting? [yN] N - diff --git a/F b/F - new file mode 100644 - examine changes to 'F'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +F - record this change to 'F'? [Ynesfdaq?] Y - - no more change to split - $ hg log -G - @ changeset: 15:d4a000f63ee9 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fold2 - | - o changeset: 14:ec31316faa9d - | parent: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fold2 - | - | o changeset: 13:d0f33db50670 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: fold1 - | | - | o changeset: 12:7b3290f6e0a0 - | | parent: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: fold1 - | | - | | o changeset: 11:e036916b63ea - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: fold0 - | | | - | | o changeset: 10:19e14c8397fc - | | | parent: 0:ea207398892e - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: fold0 - | | | - x | | changeset: 4:868d2e0eb19c - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: D - | | | - x | | changeset: 3:a8df460dbbfe - |/ / user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: C - | | - x | changeset: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B - | | - x | changeset: 1:2a34000d3544 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - -Connect them all ----------------- - - $ hg prune -s 12 -r 11 - 1 changesets pruned - $ hg prune -s 14 -r 13 - 1 changesets pruned - $ hg log -G - @ changeset: 15:d4a000f63ee9 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fold2 - | - o changeset: 14:ec31316faa9d - | parent: 4:868d2e0eb19c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fold2 - | - | o changeset: 12:7b3290f6e0a0 - | | parent: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: fold1 - | | - | | o changeset: 10:19e14c8397fc - | | | parent: 0:ea207398892e - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: fold0 - | | | - x | | changeset: 4:868d2e0eb19c - | | | user: test - | | | date: Thu Jan 01 00:00:00 1970 +0000 - | | | summary: D - | | | - x | | changeset: 3:a8df460dbbfe - |/ / user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: C - | | - x | changeset: 2:c473644ee0e9 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B - | | - x | changeset: 1:2a34000d3544 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual Test -=========== - -Obslog should show a subset of the obs history, this test check that the -walking algorithm works no matter the level of successors + precursors - - $ hg obslog 12 - o 7b3290f6e0a0 (12) fold1 - |\ - x | d15d0ffc75f6 (8) fold1 - |\ \ rewritten(parent, content) as 7b3290f6e0a0, d0f33db50670 by test (*) (glob) - | | | - | | x e036916b63ea (11) fold0 - | | | rewritten(description, parent, content) as 7b3290f6e0a0 by test (*) (glob) - | | | - x | | 868d2e0eb19c (4) D - / / rewritten(description, parent, content) as d15d0ffc75f6 by test (*) (glob) - | | - x | a8df460dbbfe (3) C - / rewritten(description, content) as d15d0ffc75f6 by test (*) (glob) - | - x b868bc49b0a4 (7) fold0 - |\ rewritten(parent, content) as 19e14c8397fc, e036916b63ea by test (*) (glob) - | | - x | 2a34000d3544 (1) A - / rewritten(description, content) as b868bc49b0a4 by test (*) (glob) - | - x c473644ee0e9 (2) B - rewritten(description, parent, content) as b868bc49b0a4 by test (*) (glob) - -While with all option, we should see 15 changesets - - $ hg obslog --all 15 - o 19e14c8397fc (10) fold0 - | - | o 7b3290f6e0a0 (12) fold1 - | |\ - | | | @ d4a000f63ee9 (15) fold2 - | | | | - | | | | o ec31316faa9d (14) fold2 - | | | |/| - | | | x | 100cc25b765f (9) fold2 - | | | |\ \ rewritten(parent, content) as d4a000f63ee9, ec31316faa9d by test (*) (glob) - | | | | | | - | +-------x d0f33db50670 (13) fold1 - | | | | | rewritten(description, parent, content) as ec31316faa9d by test (*) (glob) - | | | | | - +---x | | e036916b63ea (11) fold0 - | | / / rewritten(description, parent, content) as 7b3290f6e0a0 by test (*) (glob) - | | | | - | | x | 0da815c333f6 (5) E - | | / rewritten(description, content) as 100cc25b765f by test (*) (glob) - | | | - x | | b868bc49b0a4 (7) fold0 - |\ \ \ rewritten(parent, content) as 19e14c8397fc, e036916b63ea by test (*) (glob) - | | | | - | | x | d15d0ffc75f6 (8) fold1 - | | |\ \ rewritten(parent, content) as 7b3290f6e0a0, d0f33db50670 by test (*) (glob) - | | | | | - | | | | x d9f908fde1a1 (6) F - | | | | rewritten(description, parent, content) as 100cc25b765f by test (*) (glob) - | | | | - x | | | 2a34000d3544 (1) A - / / / rewritten(description, content) as b868bc49b0a4 by test (*) (glob) - | | | - | x | 868d2e0eb19c (4) D - | / rewritten(description, parent, content) as d15d0ffc75f6 by test (*) (glob) - | | - | x a8df460dbbfe (3) C - | rewritten(description, content) as d15d0ffc75f6 by test (*) (glob) - | - x c473644ee0e9 (2) B - rewritten(description, parent, content) as b868bc49b0a4 by test (*) (glob) - diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-obshistory.t --- a/tests/test-evolve-obshistory.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1641 +0,0 @@ -This test file test the various messages when accessing obsolete -revisions. - -Global setup -============ - - $ . $TESTDIR/testlib/common.sh - $ cat >> $HGRCPATH < [ui] - > interactive = true - > [phases] - > publish=False - > [extensions] - > evolve = - > color = - > [experimental] - > evolution.effect-flags = yes - > EOF - -Test output on amended commit -============================= - -Test setup ----------- - - $ hg init $TESTTMP/local-amend - $ cd $TESTTMP/local-amend - $ mkcommit ROOT - $ mkcommit A0 - $ echo 42 >> A0 - $ hg amend -m "A1 - > - > Better commit message" - $ hg log --hidden -G - @ changeset: 3:4ae3a4151de9 - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A1 - | - | x changeset: 2:f137d23bb3e1 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: temporary amend commit for 471f378eab4c - | | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - $ hg obslog --patch 4ae3a4151de9 - @ 4ae3a4151de9 (3) A1 - | - x 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/4ae3a4151de9-changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - - - - $ hg obslog --no-graph --patch 4ae3a4151de9 - 4ae3a4151de9 (3) A1 - 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/4ae3a4151de9-changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - - - $ hg obslog 4ae3a4151de9 --graph -T'{label("log.summary", shortdescription)} {if(markers, join(markers % "at {date|hgdate} by {user|person} ", " also "))}' - @ A1 - | - x A0 at * by test (glob) - - $ hg obslog 4ae3a4151de9 --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "4ae3a4151de9", - "rev": 3, - "shortdescription": "A1" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description", - "content" - ], - "succnodes": [ - "4ae3a4151de9" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - } - ] - $ hg obslog --hidden --patch 471f378eab4c - x 471f378eab4c (1) A0 - rewritten(description, content) as 4ae3a4151de9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/4ae3a4151de9-changeset-description - @@ -1,1 +1,3 @@ - -A0 - +A1 - + - +Better commit message - - diff -r 471f378eab4c -r 4ae3a4151de9 A0 - --- a/A0 Thu Jan 01 00:00:00 1970 +0000 - +++ b/A0 Thu Jan 01 00:00:00 1970 +0000 - @@ -1,1 +1,2 @@ - A0 - +42 - - - $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - *, (glob) - "content" - ], - "succnodes": [ - "4ae3a4151de9" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - } - ] - $ hg update 471f378eab4c - abort: hidden revision '471f378eab4c'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden "desc(A0)" - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: 4ae3a4151de9) - -Test output with pruned commit -============================== - -Test setup ----------- - - $ hg init $TESTTMP/local-prune - $ cd $TESTTMP/local-prune - $ mkcommit ROOT - $ mkcommit A0 # 0 - $ mkcommit B0 # 1 - $ hg log --hidden -G - @ changeset: 2:0dec01379d3b - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B0 - | - o changeset: 1:471f378eab4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg prune -r 'desc(B0)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory now at 471f378eab4c - 1 changesets pruned - $ hg log --hidden -G - x changeset: 2:0dec01379d3b - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B0 - | - @ changeset: 1:471f378eab4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - -Actual test ------------ - - $ hg obslog 'desc(B0)' --hidden --patch - x 0dec01379d3b (2) B0 - pruned by test (*) (glob) - (No patch available, no successors) - - $ hg obslog 'desc(B0)' --hidden --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "user": "test", - "verb": "pruned" - } - ], - "node": "0dec01379d3b", - "rev": 2, - "shortdescription": "B0" - } - ] - $ hg obslog 'desc(A0)' --patch - @ 471f378eab4c (1) A0 - - $ hg obslog 'desc(A0)' --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - } - ] - $ hg up 1 - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg up 0dec01379d3b - abort: hidden revision '0dec01379d3b'! - (use --hidden to access hidden revisions) - [255] - $ hg up --hidden -r 'desc(B0)' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (0dec01379d3b) - (use 'hg evolve' to update to its parent successor) - -Test output with splitted commit -================================ - -Test setup ----------- - - $ hg init $TESTTMP/local-split - $ cd $TESTTMP/local-split - $ mkcommit ROOT - $ echo 42 >> a - $ echo 43 >> b - $ hg commit -A -m "A0" - adding a - adding b - $ hg log --hidden -G - @ changeset: 1:471597cad322 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg split -r 'desc(A0)' -d "0 0" << EOF - > y - > y - > n - > n - > y - > y - > EOF - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - adding a - adding b - diff --git a/a b/a - new file mode 100644 - examine changes to 'a'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +42 - record change 1/2 to 'a'? [Ynesfdaq?] y - - diff --git a/b b/b - new file mode 100644 - examine changes to 'b'? [Ynesfdaq?] n - - created new head - Done splitting? [yN] n - diff --git a/b b/b - new file mode 100644 - examine changes to 'b'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +43 - record this change to 'b'? [Ynesfdaq?] y - - no more change to split - - $ hg log --hidden -G - @ changeset: 3:f257fde29c7a - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 2:337fec4d2edc - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - | x changeset: 1:471597cad322 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - -Check that debugobshistory on splitted commit show both targets - $ hg obslog 471597cad322 --hidden --patch - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - - $ hg obslog 471597cad322 --hidden --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "parent", - "content" - ], - "succnodes": [ - "337fec4d2edc", - "f257fde29c7a" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471597cad322", - "rev": 1, - "shortdescription": "A0" - } - ] -Check that debugobshistory on the first successor after split show -the revision plus the splitted one - $ hg obslog 337fec4d2edc --patch - o 337fec4d2edc (2) A0 - | - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - -With the all option, it should show the three changesets - $ hg obslog --all 337fec4d2edc --patch - o 337fec4d2edc (2) A0 - | - | @ f257fde29c7a (3) A0 - |/ - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - -Check that debugobshistory on the second successor after split show -the revision plus the splitted one - $ hg obslog f257fde29c7a --patch - @ f257fde29c7a (3) A0 - | - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - -With the all option, it should show the three changesets - $ hg obslog f257fde29c7a --all --patch - o 337fec4d2edc (2) A0 - | - | @ f257fde29c7a (3) A0 - |/ - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - -Obslog with all option all should also works on the splitted commit - $ hg obslog -a 471597cad322 --hidden --patch - o 337fec4d2edc (2) A0 - | - | @ f257fde29c7a (3) A0 - |/ - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - -Check that debugobshistory on both successors after split show -a coherent graph - $ hg obslog 'f257fde29c7a+337fec4d2edc' --patch - o 337fec4d2edc (2) A0 - | - | @ f257fde29c7a (3) A0 - |/ - x 471597cad322 (1) A0 - rewritten(parent, content) as 337fec4d2edc, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (2)) - - $ hg update 471597cad322 - abort: hidden revision '471597cad322'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'min(desc(A0))' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (471597cad322) - (use 'hg evolve' to update to its tipmost successor: 337fec4d2edc, f257fde29c7a) - -Test output with lots of splitted commit -======================================== - -Test setup ----------- - - $ hg init $TESTTMP/local-lots-split - $ cd $TESTTMP/local-lots-split - $ mkcommit ROOT - $ echo 42 >> a - $ echo 43 >> b - $ echo 44 >> c - $ echo 45 >> d - $ hg commit -A -m "A0" - adding a - adding b - adding c - adding d - $ hg log --hidden -G - @ changeset: 1:de7290d8b885 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - - $ hg split -r 'desc(A0)' -d "0 0" << EOF - > y - > y - > n - > n - > n - > n - > y - > y - > n - > n - > n - > y - > y - > n - > n - > y - > y - > EOF - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - adding a - adding b - adding c - adding d - diff --git a/a b/a - new file mode 100644 - examine changes to 'a'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +42 - record change 1/4 to 'a'? [Ynesfdaq?] y - - diff --git a/b b/b - new file mode 100644 - examine changes to 'b'? [Ynesfdaq?] n - - diff --git a/c b/c - new file mode 100644 - examine changes to 'c'? [Ynesfdaq?] n - - diff --git a/d b/d - new file mode 100644 - examine changes to 'd'? [Ynesfdaq?] n - - created new head - Done splitting? [yN] n - diff --git a/b b/b - new file mode 100644 - examine changes to 'b'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +43 - record change 1/3 to 'b'? [Ynesfdaq?] y - - diff --git a/c b/c - new file mode 100644 - examine changes to 'c'? [Ynesfdaq?] n - - diff --git a/d b/d - new file mode 100644 - examine changes to 'd'? [Ynesfdaq?] n - - Done splitting? [yN] n - diff --git a/c b/c - new file mode 100644 - examine changes to 'c'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +44 - 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] n - diff --git a/d b/d - new file mode 100644 - examine changes to 'd'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +45 - record this change to 'd'? [Ynesfdaq?] y - - no more change to split - - $ hg log --hidden -G - @ changeset: 5:c7f044602e9b - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 4:1ae8bc733a14 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 3:f257fde29c7a - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 2:337fec4d2edc - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - | x changeset: 1:de7290d8b885 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - - $ hg obslog de7290d8b885 --hidden --patch - x de7290d8b885 (1) A0 - rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (4)) - - $ hg obslog de7290d8b885 --hidden --all --patch - o 1ae8bc733a14 (4) A0 - | - | o 337fec4d2edc (2) A0 - |/ - | @ c7f044602e9b (5) A0 - |/ - | o f257fde29c7a (3) A0 - |/ - x de7290d8b885 (1) A0 - rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (4)) - - $ hg obslog de7290d8b885 --hidden --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "parent", - "content" - ], - "succnodes": [ - "1ae8bc733a14", - "337fec4d2edc", - "c7f044602e9b", - "f257fde29c7a" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "de7290d8b885", - "rev": 1, - "shortdescription": "A0" - } - ] - $ hg obslog c7f044602e9b --patch - @ c7f044602e9b (5) A0 - | - x de7290d8b885 (1) A0 - rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (4)) - - $ hg obslog c7f044602e9b --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "c7f044602e9b", - "rev": 5, - "shortdescription": "A0" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "parent", - "content" - ], - "succnodes": [ - "1ae8bc733a14", - "337fec4d2edc", - "c7f044602e9b", - "f257fde29c7a" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "de7290d8b885", - "rev": 1, - "shortdescription": "A0" - } - ] -Check that debugobshistory on all heads show a coherent graph - $ hg obslog 2::5 --patch - o 1ae8bc733a14 (4) A0 - | - | o 337fec4d2edc (2) A0 - |/ - | @ c7f044602e9b (5) A0 - |/ - | o f257fde29c7a (3) A0 - |/ - x de7290d8b885 (1) A0 - rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (4)) - - $ hg obslog 5 --all --patch - o 1ae8bc733a14 (4) A0 - | - | o 337fec4d2edc (2) A0 - |/ - | @ c7f044602e9b (5) A0 - |/ - | o f257fde29c7a (3) A0 - |/ - x de7290d8b885 (1) A0 - rewritten(parent, content) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a by test (*) (glob) - (No patch available, too many successors (4)) - - $ hg update de7290d8b885 - abort: hidden revision 'de7290d8b885'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'min(desc(A0))' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (de7290d8b885) - (use 'hg evolve' to update to its tipmost successor: 337fec4d2edc, f257fde29c7a and 2 more) - -Test output with folded commit -============================== - -Test setup ----------- - - $ hg init $TESTTMP/local-fold - $ cd $TESTTMP/local-fold - $ mkcommit ROOT - $ mkcommit A0 - $ mkcommit B0 - $ hg log --hidden -G - @ changeset: 2:0dec01379d3b - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B0 - | - o changeset: 1:471f378eab4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg fold --exact -r 'desc(A0) + desc(B0)' --date "0 0" -m "C0" - 2 changesets folded - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log --hidden -G - @ changeset: 3:eb5a0daa2192 - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C0 - | - | x changeset: 2:0dec01379d3b - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B0 - | | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - Actual test - ----------- - -Check that debugobshistory on the first folded revision show only -the revision with the target - $ hg obslog --hidden 471f378eab4c --patch - x 471f378eab4c (1) A0 - rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/eb5a0daa2192-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +C0 - - diff -r 471f378eab4c -r eb5a0daa2192 B0 - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +B0 - - -Check that with all option, all changesets are shown - $ hg obslog --hidden --all 471f378eab4c --patch - @ eb5a0daa2192 (3) C0 - |\ - x | 0dec01379d3b (2) B0 - / rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - | (No patch available, changesets rebased) - | - x 471f378eab4c (1) A0 - rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/eb5a0daa2192-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +C0 - - diff -r 471f378eab4c -r eb5a0daa2192 B0 - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +B0 - - -Check that debugobshistory on the second folded revision show only -the revision with the target - $ hg obslog --hidden 0dec01379d3b --patch - x 0dec01379d3b (2) B0 - rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - (No patch available, changesets rebased) - -Check that with all option, all changesets are shown - $ hg obslog --hidden --all 0dec01379d3b --patch - @ eb5a0daa2192 (3) C0 - |\ - x | 0dec01379d3b (2) B0 - / rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - | (No patch available, changesets rebased) - | - x 471f378eab4c (1) A0 - rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/eb5a0daa2192-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +C0 - - diff -r 471f378eab4c -r eb5a0daa2192 B0 - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +B0 - - -Check that debugobshistory on the successor revision show a coherent -graph - $ hg obslog eb5a0daa2192 --patch - @ eb5a0daa2192 (3) C0 - |\ - x | 0dec01379d3b (2) B0 - / rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - | (No patch available, changesets rebased) - | - x 471f378eab4c (1) A0 - rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/eb5a0daa2192-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +C0 - - diff -r 471f378eab4c -r eb5a0daa2192 B0 - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +B0 - - - $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "eb5a0daa2192", - "rev": 3, - "shortdescription": "C0" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description", - "content" - ], - "succnodes": [ - "eb5a0daa2192" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description", - "parent", - "content" - ], - "succnodes": [ - "eb5a0daa2192" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "0dec01379d3b", - "rev": 2, - "shortdescription": "B0" - } - ] - $ hg update 471f378eab4c - abort: hidden revision '471f378eab4c'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'desc(A0)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - $ hg update 0dec01379d3b - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - abort: hidden revision '0dec01379d3b'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'desc(B0)' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (0dec01379d3b) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - -Test output with divergence -=========================== - -Test setup ----------- - - $ hg init $TESTTMP/local-divergence - $ cd $TESTTMP/local-divergence - $ mkcommit ROOT - $ mkcommit A0 - $ hg amend -m "A1" - $ hg log --hidden -G - @ changeset: 2:fdf9bde5129a - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A1 - | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg update --hidden 'desc(A0)' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: fdf9bde5129a) - $ hg amend -m "A2" - 2 new divergent changesets - $ hg log --hidden -G - @ changeset: 3:65b757b745b9 - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A2 - | - | o changeset: 2:fdf9bde5129a - |/ parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A1 - | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Actual test ------------ - -Check that debugobshistory on the divergent revision show both destinations - $ hg obslog --hidden 471f378eab4c --patch - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - -Check that with all option, every changeset is shown - $ hg obslog --hidden --all 471f378eab4c --patch - @ 65b757b745b9 (3) A2 - | - | o fdf9bde5129a (2) A1 - |/ - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool - [ - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description" - ], - "succnodes": [ - "65b757b745b9" - ], - "user": "test", - "verb": "rewritten" - }, - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description" - ], - "succnodes": [ - "fdf9bde5129a" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - } - ] -Check that debugobshistory on the first diverged revision show the revision -and the diverent one - $ hg obslog fdf9bde5129a --patch - o fdf9bde5129a (2) A1 - | - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - -Check that all option show all of them - $ hg obslog fdf9bde5129a -a --patch - @ 65b757b745b9 (3) A2 - | - | o fdf9bde5129a (2) A1 - |/ - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that debugobshistory on the second diverged revision show the revision -and the diverent one - $ hg obslog 65b757b745b9 --patch - @ 65b757b745b9 (3) A2 - | - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that all option show all of them - $ hg obslog 65b757b745b9 -a --patch - @ 65b757b745b9 (3) A2 - | - | o fdf9bde5129a (2) A1 - |/ - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - -Check that debugobshistory on the both diverged revision show a coherent -graph - $ hg obslog '65b757b745b9+fdf9bde5129a' --patch - @ 65b757b745b9 (3) A2 - | - | o fdf9bde5129a (2) A1 - |/ - x 471f378eab4c (1) A0 - rewritten(description) as 65b757b745b9 by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/65b757b745b9-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A2 - - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ hg obslog '65b757b745b9+fdf9bde5129a' --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "65b757b745b9", - "rev": 3, - "shortdescription": "A2" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description" - ], - "succnodes": [ - "65b757b745b9" - ], - "user": "test", - "verb": "rewritten" - }, - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description" - ], - "succnodes": [ - "fdf9bde5129a" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - }, - { - "markers": [], - "node": "fdf9bde5129a", - "rev": 2, - "shortdescription": "A1" - } - ] - $ hg update 471f378eab4c - abort: hidden revision '471f378eab4c'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'desc(A0)' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (471f378eab4c) - (471f378eab4c has diverged, use 'hg evolve --list --contentdivergent' to resolve the issue) - -Test output with amended + folded commit -======================================== - -Test setup ----------- - - $ hg init $TESTTMP/local-amend-fold - $ cd $TESTTMP/local-amend-fold - $ mkcommit ROOT - $ mkcommit A0 - $ mkcommit B0 - $ hg amend -m "B1" - $ hg log --hidden -G - @ changeset: 3:b7ea6d14e664 - | tag: tip - | parent: 1:471f378eab4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B1 - | - | x changeset: 2:0dec01379d3b - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: B0 - | - o changeset: 1:471f378eab4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg fold --exact -r 'desc(A0) + desc(B1)' --date "0 0" -m "C0" - 2 changesets folded - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log --hidden -G - @ changeset: 4:eb5a0daa2192 - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: C0 - | - | x changeset: 3:b7ea6d14e664 - | | parent: 1:471f378eab4c - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B1 - | | - | | x changeset: 2:0dec01379d3b - | |/ user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: B0 - | | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - Actual test - ----------- - -Check that debugobshistory on head show a coherent graph - $ hg obslog eb5a0daa2192 --patch - @ eb5a0daa2192 (4) C0 - |\ - x | 471f378eab4c (1) A0 - / rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - | --- a/471f378eab4c-changeset-description - | +++ b/eb5a0daa2192-changeset-description - | @@ -1,1 +1,1 @@ - | -A0 - | +C0 - | - | diff -r 471f378eab4c -r eb5a0daa2192 B0 - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +B0 - | - | - x b7ea6d14e664 (3) B1 - | rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - | (No patch available, changesets rebased) - | - x 0dec01379d3b (2) B0 - rewritten(description) as b7ea6d14e664 by test (*) (glob) - --- a/0dec01379d3b-changeset-description - +++ b/b7ea6d14e664-changeset-description - @@ -1,1 +1,1 @@ - -B0 - +B1 - - -Check that obslog on ROOT with all option show everything - $ hg obslog 1 --hidden --all --patch - @ eb5a0daa2192 (4) C0 - |\ - x | 471f378eab4c (1) A0 - / rewritten(description, content) as eb5a0daa2192 by test (*) (glob) - | --- a/471f378eab4c-changeset-description - | +++ b/eb5a0daa2192-changeset-description - | @@ -1,1 +1,1 @@ - | -A0 - | +C0 - | - | diff -r 471f378eab4c -r eb5a0daa2192 B0 - | --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - | +++ b/B0 Thu Jan 01 00:00:00 1970 +0000 - | @@ -0,0 +1,1 @@ - | +B0 - | - | - x b7ea6d14e664 (3) B1 - | rewritten(description, parent, content) as eb5a0daa2192 by test (*) (glob) - | (No patch available, changesets rebased) - | - x 0dec01379d3b (2) B0 - rewritten(description) as b7ea6d14e664 by test (*) (glob) - --- a/0dec01379d3b-changeset-description - +++ b/b7ea6d14e664-changeset-description - @@ -1,1 +1,1 @@ - -B0 - +B1 - - - $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool - [ - { - "markers": [], - "node": "eb5a0daa2192", - "rev": 4, - "shortdescription": "C0" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - *, (glob) - *, (glob) - "content" - ], - "succnodes": [ - "eb5a0daa2192" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "b7ea6d14e664", - "rev": 3, - "shortdescription": "B1" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description" - ], - "succnodes": [ - "b7ea6d14e664" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "0dec01379d3b", - "rev": 2, - "shortdescription": "B0" - }, - { - "markers": [ - { - "date": [ - *, (glob) - 0 (glob) - ], - "effect": [ - "description", - "content" - ], - "succnodes": [ - "eb5a0daa2192" - ], - "user": "test", - "verb": "rewritten" - } - ], - "node": "471f378eab4c", - "rev": 1, - "shortdescription": "A0" - } - ] - $ hg update 471f378eab4c - abort: hidden revision '471f378eab4c'! - (use --hidden to access hidden revisions) - [255] - $ hg update --hidden 'desc(A0)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - $ hg update --hidden 0dec01379d3b - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (0dec01379d3b) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - $ hg update 0dec01379d3b - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (0dec01379d3b) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - $ hg update --hidden 'desc(B0)' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - working directory parent is obsolete! (0dec01379d3b) - (use 'hg evolve' to update to its successor: eb5a0daa2192) - -Test output with pushed and pulled obs markers -============================================== - -Test setup ----------- - - $ hg init $TESTTMP/local-remote-markers-1 - $ cd $TESTTMP/local-remote-markers-1 - $ mkcommit ROOT - $ mkcommit A0 - $ hg log --hidden -G - @ changeset: 1:471f378eab4c - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg clone $TESTTMP/local-remote-markers-1 $TESTTMP/local-remote-markers-2 - updating to branch default - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cd $TESTTMP/local-remote-markers-2 - $ hg log --hidden -G - @ changeset: 1:471f378eab4c - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ cd $TESTTMP/local-remote-markers-1 - $ hg amend -m "A1" - $ hg amend -m "A2" - $ hg log --hidden -G - @ changeset: 3:7a230b46bf61 - | tag: tip - | parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A2 - | - | x changeset: 2:fdf9bde5129a - |/ parent: 0:ea207398892e - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A1 - | - | x changeset: 1:471f378eab4c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: A0 - | - o changeset: 0:ea207398892e - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - Actual test - ----------- - - $ hg obslog 7a230b46bf61 --patch - @ 7a230b46bf61 (3) A2 - | - x fdf9bde5129a (2) A1 - | rewritten(description) as 7a230b46bf61 by test (*) (glob) - | --- a/fdf9bde5129a-changeset-description - | +++ b/7a230b46bf61-changeset-description - | @@ -1,1 +1,1 @@ - | -A1 - | +A2 - | - | - x 471f378eab4c (1) A0 - rewritten(description) as fdf9bde5129a by test (*) (glob) - --- a/471f378eab4c-changeset-description - +++ b/fdf9bde5129a-changeset-description - @@ -1,1 +1,1 @@ - -A0 - +A1 - - - $ cd $TESTTMP/local-remote-markers-2 - $ hg pull - pulling from $TESTTMP/local-remote-markers-1 - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 0 changes to 1 files (+1 heads) - 2 new obsolescence markers - (run 'hg heads' to see heads, 'hg merge' to merge) - working directory parent is obsolete! (471f378eab4c) - (use 'hg evolve' to update to its successor: 7a230b46bf61) -Check that debugobshistory works with markers pointing to missing local -changectx - $ hg obslog 7a230b46bf61 --patch - o 7a230b46bf61 (2) A2 - | - x fdf9bde5129a - | rewritten(description) as 7a230b46bf61 by test (*) (glob) - | (No patch available, context is not local) - | - @ 471f378eab4c (1) A0 - rewritten(description) as fdf9bde5129a by test (*) (glob) - (No patch available, successor is unknown locally) - - $ hg obslog 7a230b46bf61 --color=debug --patch - o [evolve.node|7a230b46bf61] [evolve.rev|(2)] [evolve.short_description|A2] - | - x [evolve.node evolve.missing_change_ctx|fdf9bde5129a] - | [evolve.verb|rewritten](description) as [evolve.node|7a230b46bf61] by [evolve.user|test] [evolve.date|(*)] (glob) - | (No patch available, context is not local) - | - @ [evolve.node|471f378eab4c] [evolve.rev|(1)] [evolve.short_description|A0] - [evolve.verb|rewritten](description) as [evolve.node|fdf9bde5129a] by [evolve.user|test] [evolve.date|(*)] (glob) - (No patch available, successor is unknown locally) - diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-serveronly.t --- a/tests/test-evolve-serveronly.t Mon Oct 23 15:50:21 2017 +0200 +++ b/tests/test-evolve-serveronly.t Mon Oct 23 15:50:22 2017 +0200 @@ -10,7 +10,7 @@ > [phases] > publish = False > [experimental] - > bundle2-exp=False # < Mercurial-4.0 + > bundle2-exp=False > [devel] > legacy.exchange=bundle1 > [extensions] diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-templates.t --- a/tests/test-evolve-templates.t Mon Oct 23 15:50:21 2017 +0200 +++ b/tests/test-evolve-templates.t Mon Oct 23 15:50:22 2017 +0200 @@ -69,15 +69,6 @@ (use 'hg evolve' to update to its successor: d004c8f274b9) Precursors template should show current revision as it is the working copy - $ hg olog tip - o d004c8f274b9 (4) A2 - | - x a468dc9b3633 (3) A1 - | rewritten(description) as d004c8f274b9 by test2 (*) (glob) - | - @ 471f378eab4c (1) A0 - rewritten(description, content) as a468dc9b3633 by test (*) (glob) - $ hg tlog o d004c8f274b9 | Precursors: 471f378eab4c diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve-topic.t --- a/tests/test-evolve-topic.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,226 +0,0 @@ - -Check we can find the topic extensions - - $ cat >> $HGRCPATH < [defaults] - > amend=-d "0 0" - > fold=-d "0 0" - > [phases] - > publish = False - > [ui] - > logtemplate = {rev} - \{{get(namespaces, "topics")}} {node|short} {desc} ({phase})\n - > [diff] - > git = 1 - > unified = 0 - > [extensions] - > rebase = - > EOF - $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH - $ echo "topic=$(echo $(dirname $TESTDIR))/hgext3rd/topic/" >> $HGRCPATH - - $ mkcommit() { - > echo "$1" > "$1" - > hg add "$1" - > hg ci -m "add $1" - > } - -Create a simple setup - - $ hg init repoa - $ cd repoa - $ mkcommit aaa - $ mkcommit bbb - $ hg topic foo - marked working directory as topic: foo - $ mkcommit ccc - active topic 'foo' grew its first changeset - $ mkcommit ddd - $ mkcommit eee - $ mkcommit fff - $ hg topic bar - $ mkcommit ggg - active topic 'bar' grew its first changeset - $ mkcommit hhh - $ mkcommit iii - $ mkcommit jjj - - $ hg log -G - @ 9 - {bar} 1d964213b023 add jjj (draft) - | - o 8 - {bar} fcab990f3261 add iii (draft) - | - o 7 - {bar} b0c2554835ac add hhh (draft) - | - o 6 - {bar} c748293f1c1a add ggg (draft) - | - o 5 - {foo} 6a6b7365c751 add fff (draft) - | - o 4 - {foo} 3969ab847d9c add eee (draft) - | - o 3 - {foo} 4e3a154f38c7 add ddd (draft) - | - o 2 - {foo} cced9bac76e3 add ccc (draft) - | - o 1 - {} a4dbed0837ea add bbb (draft) - | - o 0 - {} 199cc73e9a0b add aaa (draft) - - -Test that evolve --all evolve the current topic ------------------------------------------------ - -make a mess - - $ hg up foo - switching to topic foo - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ hg topic -l - ### topic: foo (?) - ### branch: default (?) - ### target: default (branch) - t4@ add fff (current) - t3: add eee - t2: add ddd - t1: add ccc - t0^ add bbb (base) - $ hg up 'desc(ddd)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo ddd >> ddd - $ hg amend - 6 new unstable changesets - $ hg up 'desc(fff)' - 3 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo fff >> fff - $ hg amend - - $ hg log -G - @ 13 - {foo} e104f49bab28 add fff (draft) - | - | o 11 - {foo} d9cacd156ffc add ddd (draft) - | | - | | o 9 - {bar} 1d964213b023 add jjj (draft) - | | | - | | o 8 - {bar} fcab990f3261 add iii (draft) - | | | - | | o 7 - {bar} b0c2554835ac add hhh (draft) - | | | - | | o 6 - {bar} c748293f1c1a add ggg (draft) - | | | - +---x 5 - {foo} 6a6b7365c751 add fff (draft) - | | - o | 4 - {foo} 3969ab847d9c add eee (draft) - | | - x | 3 - {foo} 4e3a154f38c7 add ddd (draft) - |/ - o 2 - {foo} cced9bac76e3 add ccc (draft) - | - o 1 - {} a4dbed0837ea add bbb (draft) - | - o 0 - {} 199cc73e9a0b add aaa (draft) - - -Run evolve --all - - $ hg evolve --all - move:[4] add eee - atop:[11] add ddd - move:[13] add fff - atop:[14] add eee - working directory is now at 070c5573d8f9 - $ hg log -G - @ 15 - {foo} 070c5573d8f9 add fff (draft) - | - o 14 - {foo} 42b49017ff90 add eee (draft) - | - o 11 - {foo} d9cacd156ffc add ddd (draft) - | - | o 9 - {bar} 1d964213b023 add jjj (draft) - | | - | o 8 - {bar} fcab990f3261 add iii (draft) - | | - | o 7 - {bar} b0c2554835ac add hhh (draft) - | | - | o 6 - {bar} c748293f1c1a add ggg (draft) - | | - | x 5 - {foo} 6a6b7365c751 add fff (draft) - | | - | x 4 - {foo} 3969ab847d9c add eee (draft) - | | - | x 3 - {foo} 4e3a154f38c7 add ddd (draft) - |/ - o 2 - {foo} cced9bac76e3 add ccc (draft) - | - o 1 - {} a4dbed0837ea add bbb (draft) - | - o 0 - {} 199cc73e9a0b add aaa (draft) - - -Test that evolve does not loose topic information -------------------------------------------------- - - $ hg evolve --rev 'topic(bar)' - move:[6] add ggg - atop:[15] add fff - move:[7] add hhh - atop:[16] add ggg - move:[8] add iii - atop:[17] add hhh - move:[9] add jjj - atop:[18] add iii - working directory is now at 9bf430c106b7 - $ hg log -G - @ 19 - {bar} 9bf430c106b7 add jjj (draft) - | - o 18 - {bar} d2dc89c57700 add iii (draft) - | - o 17 - {bar} 20bc4d02aa62 add hhh (draft) - | - o 16 - {bar} 16d6f664b17c add ggg (draft) - | - o 15 - {foo} 070c5573d8f9 add fff (draft) - | - o 14 - {foo} 42b49017ff90 add eee (draft) - | - o 11 - {foo} d9cacd156ffc add ddd (draft) - | - o 2 - {foo} cced9bac76e3 add ccc (draft) - | - o 1 - {} a4dbed0837ea add bbb (draft) - | - o 0 - {} 199cc73e9a0b add aaa (draft) - - -Tests next and prev behavior -============================ - -Basic move are restricted to the current topic - - $ hg up foo - switching to topic foo - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ hg prev - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - [14] add eee - $ hg next - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - [15] add fff - $ hg next - no children on topic "foo" - do you want --no-topic - [1] - $ hg next --no-topic - switching to topic bar - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - [16] add ggg - $ hg prev - preserving the current topic 'bar' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - [15] add fff - $ hg prev - no parent in topic "bar" - (do you want --no-topic) - [1] - $ hg prev --no-topic - switching to topic foo - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - [14] add eee diff -r 9fa39195a4c9 -r c71e371c797b tests/test-evolve.t --- a/tests/test-evolve.t Mon Oct 23 15:50:21 2017 +0200 +++ b/tests/test-evolve.t Mon Oct 23 15:50:22 2017 +0200 @@ -765,20 +765,6 @@ $ hg debugrebuildstate $ hg st -Test olog - - $ hg olog | head -n 10 # hg touch makes the output unstable (fix it with devel option for more stable touch) - @ d26d339c513f (12) add 4 - |\ - x | af636757ce3b (11) add 3 - |\ \ rewritten(description, user, parent, content) as d26d339c513f by test (*) (glob) - | | | - | \ \ - | |\ \ - | | | x ce341209337f (4) add 4 - | | | rewritten(description, user, content) as d26d339c513f by test (*) (glob) - | | | - Test obsstore stat $ hg debugobsstorestat @@ -1178,7 +1164,7 @@ summary summarize working directory state update update working directory (or switch revisions) - (use 'hg help' for the full list of commands or 'hg -v' for details) + (use "hg help" for the full list of commands or "hg -v" for details) [255] $ hg fold hg: unknown command 'fold' @@ -1204,7 +1190,7 @@ summary summarize working directory state update update working directory (or switch revisions) - (use 'hg help' for the full list of commands or 'hg -v' for details) + (use "hg help" for the full list of commands or "hg -v" for details) [255] Enabling commands selectively, only fold enabled, next is still unknown $ cat >> $HGRCPATH <> $HGRCPATH - $ echo "topic=$(echo $(dirname $TESTDIR))/hgext3rd/topic/" >> $HGRCPATH - $ hg topic mytopic - marked working directory as topic: mytopic - $ echo babar > babar - $ echo celeste > celeste - $ hg add babar celeste - $ hg commit -m "Works on mytopic" babar celeste --user victor - active topic 'mytopic' grew its first changeset - $ hg log -r . - changeset: 21:26f72cfaf036 - branch: new-branch - tag: tip - topic: mytopic - user: victor - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Works on mytopic - - $ hg summary - parent: 21:26f72cfaf036 tip - Works on mytopic - branch: new-branch - commit: 2 unknown (clean) - update: (current) - phases: 9 draft - topic: mytopic - -Split it - - $ hg split -U << EOF - > Y - > Y - > N - > Y - > Y - > Y - > EOF - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - adding babar - adding celeste - diff --git a/babar b/babar - new file mode 100644 - examine changes to 'babar'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +babar - record change 1/2 to 'babar'? [Ynesfdaq?] Y - - diff --git a/celeste b/celeste - new file mode 100644 - examine changes to 'celeste'? [Ynesfdaq?] N - - Done splitting? [yN] Y - diff --git a/celeste b/celeste - new file mode 100644 - examine changes to 'celeste'? [Ynesfdaq?] Y - - @@ -0,0 +1,1 @@ - +celeste - record this change to 'celeste'? [Ynesfdaq?] Y - - no more change to split - -Check that the topic is still here - - $ hg log -r "tip~1::" - changeset: 22:addcf498f19e - branch: new-branch - topic: mytopic - parent: 20:fdb403258632 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: split7 - - changeset: 23:2532b288af61 - branch: new-branch - tag: tip - topic: mytopic - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: split8 - - $ hg topic - * mytopic (2 changesets) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-stabilize-result.t --- a/tests/test-stabilize-result.t Mon Oct 23 15:50:21 2017 +0200 +++ b/tests/test-stabilize-result.t Mon Oct 23 15:50:22 2017 +0200 @@ -97,7 +97,7 @@ +newer a $ hg evolve --continue grafting 5:3655f0f50885 "newer a" - abort: unresolved merge conflicts (see 'hg help resolve') + abort: unresolved merge conflicts (see "hg help resolve") [255] $ hg resolve -m a (no more unresolved files) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-stack-branch.t --- a/tests/test-stack-branch.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,315 +0,0 @@ - - $ . "$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 - ### target: other (branch) - 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 - ### target: foo (branch) - b4@ c_f (current) - b3: c_e - b2: c_d - b1: c_c - b0^ c_b (base) - $ hg stack -v - ### target: foo (branch) - b4(913c298d8b0a)@ c_f (current) - b3(4f2a69f6d380): c_e - b2(f61adbacd17a): c_d - b1(3e9313bc4b71): c_c - b0(4a04f1104a27)^ c_b (base) - -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 - ### target: foo (branch) - b4$ c_f (unstable) - b3$ c_e (unstable) - b2@ c_d (current) - b1: c_c - b0^ c_b (base) - $ hg up b3 - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg stack - ### target: foo (branch) - b4$ c_f (unstable) - b3$ c_e (current unstable) - b2: c_d - b1: c_c - b0^ c_b (base) - $ 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 - ### target: foo (branch) (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 - b0^ c_b (base) - -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 - ### target: foo (branch) (2 heads) - b6$ c_f (unstable) - b5$ c_e (unstable) - b2^ c_D (base current) - b4: c_h - b3: c_g - b2@ c_D (current) - b1: c_c - b0^ c_b (base) - -Check that stack doesn't show draft changesets on a branch ----------------------------------------------------------- - - $ hg log --graph - 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 - ### target: foo (branch) (2 heads) - b6$ c_f (unstable) - b5$ c_e (unstable) - b2^ c_D (base current) - b4: c_h - b3: c_g - b2@ c_D (current) - b1: c_c - b0^ c_b (base) - $ hg phase --public b1 - $ hg stack - ### target: foo (branch) (2 heads) - b5$ c_f (unstable) - b4$ c_e (unstable) - b1^ c_D (base current) - b3: c_h - b2: c_g - b1@ c_D (current) - b0^ c_c (base) - -Check that stack doesn't show changeset with a topic ----------------------------------------------------- - - $ hg topic --rev b4::b5 sometopic - changed topic on 2 changes - $ hg stack - ### target: foo (branch) - b3: c_h - b2: c_g - b1@ c_D (current) - b0^ c_c (base) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-change.t --- a/tests/test-topic-change.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,368 +0,0 @@ -Tests for changing and clearing topics -====================================== - - $ . "$TESTDIR/testlib/topic_setup.sh" - $ cat <> $HGRCPATH - > [experimental] - > # disable the new graph style until we drop 3.7 support - > graphstyle.missing = | - > evolution=createmarkers, allowunstable - > [phases] - > publish=false - > [alias] - > glog = log -G -T "{rev}:{node|short} \{{topics}}\n{desc} ({bookmarks})\n\n" - > EOF - -About the glog output: {} contains the topic name and () will contain the bookmark - -Setting up a repo ----------------- - - $ hg init topics - $ cd topics - $ for ch in a b c d e f g h; do touch $ch; echo "foo" >> $ch; hg ci -Aqm "Added "$ch; done - - $ hg glog - @ 7:ec2426147f0e {} - | Added h () - | - o 6:87d6d6676308 {} - | Added g () - | - o 5:825660c69f0c {} - | Added f () - | - o 4:aa98ab95a928 {} - | Added e () - | - o 3:62615734edd5 {} - | Added d () - | - o 2:28ad74487de9 {} - | Added c () - | - o 1:29becc82797a {} - | Added b () - | - o 0:18d04c59bb5d {} - Added a () - - -Clearing topic from revision without topic - - $ hg topic -r . --clear - changed topic on 0 changes - -Clearing current topic when no active topic is not error - - $ hg topic - $ hg topic --clear - -Setting topics to all the revisions - - $ hg topic -r 0:: foo - switching to topic foo - changed topic on 8 changes - $ hg glog - @ 15:05095f607171 {foo} - | Added h () - | - o 14:97505b53ab0d {foo} - | Added g () - | - o 13:75a8360fe626 {foo} - | Added f () - | - o 12:abcedffeae90 {foo} - | Added e () - | - o 11:1315a3808ed0 {foo} - | Added d () - | - o 10:1fa891977a22 {foo} - | Added c () - | - o 9:a53ba98dd6b8 {foo} - | Added b () - | - o 8:86a186070af2 {foo} - Added a () - - -Clearing the active topic using --clear - - $ hg topic - * foo (8 changesets) - $ hg topic --clear - $ hg topic - foo (8 changesets) -Changing topics on some revisions (also testing issue 5441) - - $ hg topic -r 12:: bar - switching to topic bar - changed topic on 4 changes - $ hg glog - @ 19:d7d36e193ea7 {bar} - | Added h () - | - o 18:e7b418d79a05 {bar} - | Added g () - | - o 17:82e0b14f4d9e {bar} - | Added f () - | - o 16:edc4a6b9ea60 {bar} - | Added e () - | - o 11:1315a3808ed0 {foo} - | Added d () - | - o 10:1fa891977a22 {foo} - | Added c () - | - o 9:a53ba98dd6b8 {foo} - | Added b () - | - o 8:86a186070af2 {foo} - Added a () - - -Changing topics without passing topic name and clear - - $ hg topic -r . - abort: changing topic requires a topic name or --clear - [255] - -Changing topic using --current flag - - $ hg topic foobar - $ hg topic -r . --current - active topic 'foobar' grew its first changeset - changed topic on 1 changes - $ hg glog -r . - @ 20:c2d6b7df5dcf {foobar} - | Added h () - | - -Changing topic in between the stack - - $ hg topic -r 9::10 --current - changed topic on 2 changes - $ hg glog - o 22:1b88140feefe {foobar} - | Added c () - | - o 21:c39cabfcbbf7 {foobar} - | Added b () - | - | @ 20:c2d6b7df5dcf {foobar} - | | Added h () - | | - | o 18:e7b418d79a05 {bar} - | | Added g () - | | - | o 17:82e0b14f4d9e {bar} - | | Added f () - | | - | o 16:edc4a6b9ea60 {bar} - | | Added e () - | | - | o 11:1315a3808ed0 {foo} - | | Added d () - | | - | x 10:1fa891977a22 {foo} - | | Added c () - | | - | x 9:a53ba98dd6b8 {foo} - |/ Added b () - | - o 8:86a186070af2 {foo} - Added a () - - $ hg rebase -s 11 -d 22 - rebasing 11:1315a3808ed0 "Added d" - switching to topic foo - rebasing 16:edc4a6b9ea60 "Added e" - switching to topic bar - rebasing 17:82e0b14f4d9e "Added f" - rebasing 18:e7b418d79a05 "Added g" - rebasing 20:c2d6b7df5dcf "Added h" - switching to topic foobar - - $ hg glog - @ 27:a1a9465da59b {foobar} - | Added h () - | - o 26:7c76c271395f {bar} - | Added g () - | - o 25:7f26084dfaf1 {bar} - | Added f () - | - o 24:b1f05e9ba0b5 {bar} - | Added e () - | - o 23:f9869da2286e {foo} - | Added d () - | - o 22:1b88140feefe {foobar} - | Added c () - | - o 21:c39cabfcbbf7 {foobar} - | Added b () - | - o 8:86a186070af2 {foo} - Added a () - -Amending a topic ----------------- - -When the changeset has a topic and we have different active topic - - $ hg topic wat - $ hg ci --amend - active topic 'wat' grew its first changeset - $ hg glog -r . - @ 29:61470c956807 {wat} - | Added h () - | - -Clear the current topic and amending - - $ hg topic --clear - $ hg ci --amend - $ hg glog -r . - @ 31:b584fa49f42e {} - | Added h () - | - -When the changeset does not has a topic but we have an active topic - - $ hg topic watwat - marked working directory as topic: watwat - $ hg ci --amend - active topic 'watwat' grew its first changeset - $ hg glog -r . - @ 33:a24c31c35013 {watwat} - | Added h () - | - -Testing changing topics on public changeset -------------------------------------------- - - $ hg phase -r 8 -p - -Clearing the topic - - $ hg topic -r 8 --clear - abort: can't change topic of a public change - [255] - -Changing the topic - - $ hg topic -r 8 foobarboo - abort: can't change topic of a public change - [255] - -Testing the bookmark movement ------------------------------ - - $ hg bookmark book - $ hg glog - @ 33:a24c31c35013 {watwat} - | Added h (book) - | - o 26:7c76c271395f {bar} - | Added g () - | - o 25:7f26084dfaf1 {bar} - | Added f () - | - o 24:b1f05e9ba0b5 {bar} - | Added e () - | - o 23:f9869da2286e {foo} - | Added d () - | - o 22:1b88140feefe {foobar} - | Added c () - | - o 21:c39cabfcbbf7 {foobar} - | Added b () - | - o 8:86a186070af2 {} - Added a () - -On clearing the topic - - $ hg topic -r . --clear - clearing empty topic "watwat" - active topic 'watwat' is now empty - changed topic on 1 changes - - $ hg glog - @ 34:c48d6d71b2d9 {} - | Added h () - | - | x 33:a24c31c35013 {watwat} - |/ Added h (book) - | - o 26:7c76c271395f {bar} - | Added g () - | - o 25:7f26084dfaf1 {bar} - | Added f () - | - o 24:b1f05e9ba0b5 {bar} - | Added e () - | - o 23:f9869da2286e {foo} - | Added d () - | - o 22:1b88140feefe {foobar} - | Added c () - | - o 21:c39cabfcbbf7 {foobar} - | Added b () - | - o 8:86a186070af2 {} - Added a () - - -On changing the topic - - $ hg bookmark bookboo - $ hg topic -r . movebook - switching to topic movebook - changed topic on 1 changes - $ hg glog - @ 35:1b83d11095b9 {movebook} - | Added h () - | - | x 34:c48d6d71b2d9 {} - |/ Added h (bookboo) - | - | x 33:a24c31c35013 {watwat} - |/ Added h (book) - | - o 26:7c76c271395f {bar} - | Added g () - | - o 25:7f26084dfaf1 {bar} - | Added f () - | - o 24:b1f05e9ba0b5 {bar} - | Added e () - | - o 23:f9869da2286e {foo} - | Added d () - | - o 22:1b88140feefe {foobar} - | Added c () - | - o 21:c39cabfcbbf7 {foobar} - | Added b () - | - o 8:86a186070af2 {} - Added a () - diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-dest.t --- a/tests/test-topic-dest.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,498 +0,0 @@ - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ hg init jungle - $ cd jungle - $ cat <> .hg/hgrc - > [extensions] - > rebase= - > histedit= - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [ui] - > logtemplate = '{rev} ({topics}) {desc}\n' - > EOF - - $ for x in alpha beta gamma delta ; do - > echo file $x >> $x - > hg add $x - > hg ci -m "c_$x" - > done - -Test NGTip feature -================== - -Simple linear case - - $ echo babar >> jungle - $ hg add jungle - $ hg ci -t elephant -m babar - active topic 'elephant' grew its first changeset - - $ hg log -G - @ 4 (elephant) babar - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - $ hg log -r 'ngtip(.)' - 3 () c_delta - $ hg log -r 'default' - 3 () c_delta - - -multiple heads with topic - - $ hg up "desc('c_beta')" - 0 files updated, 0 files merged, 3 files removed, 0 files unresolved - $ echo zephir >> jungle - $ hg add jungle - $ hg ci -t monkey -m zephir - active topic 'monkey' grew its first changeset - $ hg log -G - @ 5 (monkey) zephir - | - | o 4 (elephant) babar - | | - | o 3 () c_delta - | | - | o 2 () c_gamma - |/ - o 1 () c_beta - | - o 0 () c_alpha - - $ hg log -r 'ngtip(.)' - 3 () c_delta - $ hg log -r 'default' - 3 () c_delta - -one of the head is a valid tip - - $ hg up "desc('c_delta')" - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo epsilon >> epsilon - $ hg add epsilon - $ hg ci -m "c_epsilon" - $ hg log -G - @ 6 () c_epsilon - | - | o 5 (monkey) zephir - | | - +---o 4 (elephant) babar - | | - o | 3 () c_delta - | | - o | 2 () c_gamma - |/ - o 1 () c_beta - | - o 0 () c_alpha - - $ hg log -r 'ngtip(.)' - 6 () c_epsilon - $ hg log -r 'default' - 6 () c_epsilon - -rebase destination -================== - -rebase on branch ngtip - - $ hg up elephant - switching to topic elephant - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg rebase - rebasing 4:cb7ae72f4a80 "babar" - switching to topic elephant - $ hg log -G - @ 7 (elephant) babar - | - o 6 () c_epsilon - | - | o 5 (monkey) zephir - | | - o | 3 () c_delta - | | - o | 2 () c_gamma - |/ - o 1 () c_beta - | - o 0 () c_alpha - - $ hg up monkey - switching to topic monkey - 1 files updated, 0 files merged, 3 files removed, 0 files unresolved - $ hg rebase - rebasing 5:d832ddc604ec "zephir" - switching to topic monkey - $ hg log -G - @ 8 (monkey) zephir - | - | o 7 (elephant) babar - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -Rebase on other topic heads if any - - $ hg up 'desc(c_delta)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo "General Huc" >> monkeyville - $ hg add monkeyville - $ hg ci -t monkey -m Huc - $ hg log -G - @ 9 (monkey) Huc - | - | o 8 (monkey) zephir - | | - | | o 7 (elephant) babar - | |/ - | o 6 () c_epsilon - |/ - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - $ hg rebase - rebasing 9:d79a104e2902 "Huc" (tip) - $ hg log -G - @ 10 (monkey) Huc - | - o 8 (monkey) zephir - | - | o 7 (elephant) babar - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -merge destination -================= - - $ hg up 'ngtip(default)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg up default - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo zeta >> zeta - $ hg add zeta - $ hg ci -m "c_zeta" - $ hg log -G - @ 11 () c_zeta - | - | o 10 (monkey) Huc - | | - | o 8 (monkey) zephir - |/ - | o 7 (elephant) babar - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - $ hg up elephant - switching to topic elephant - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg rebase -d 'desc(c_zeta)' # make sure tip is elsewhere - rebasing 7:8d0b77140b05 "babar" - switching to topic elephant - $ hg up monkey - switching to topic monkey - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg merge - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg topic - elephant (1 changesets) - * monkey (2 changesets) - $ hg ci -m 'merge with default' - $ hg topic - elephant (1 changesets) - * monkey (3 changesets) - $ hg log -G - @ 13 (monkey) merge with default - |\ - | | o 12 (elephant) babar - | |/ - | o 11 () c_zeta - | | - o | 10 (monkey) Huc - | | - o | 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - - -Check pull --rebase -------------------- - -(we broke it a some point) - - $ cd .. - $ hg clone jungle other --rev '2' - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files - updating to branch default - 3 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cd other - $ echo other > other - $ hg add other - $ hg ci -m 'c_other' - $ hg pull -r default --rebase - pulling from $TESTTMP/jungle (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files (+1 heads) - rebasing 3:dbc48dd9e743 "c_other" - $ hg log -G - @ 7 () c_other - | - o 6 () c_zeta - | - o 5 () c_epsilon - | - o 4 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - $ cd ../jungle - - -Default destination for update -=============================== - -initial setup - - $ hg up elephant - switching to topic elephant - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo arthur >> jungle - $ hg ci -m arthur - $ echo pompadour >> jungle - $ hg ci -m pompadour - $ hg up 'roots(all())' - 0 files updated, 0 files merged, 6 files removed, 0 files unresolved - $ hg log -G - o 15 (elephant) pompadour - | - o 14 (elephant) arthur - | - | o 13 (monkey) merge with default - | |\ - o---+ 12 (elephant) babar - / / - | o 11 () c_zeta - | | - o | 10 (monkey) Huc - | | - o | 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - @ 0 () c_alpha - - -testing default destination on a branch - - $ hg up - 5 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - o 15 (elephant) pompadour - | - o 14 (elephant) arthur - | - | o 13 (monkey) merge with default - | |\ - o---+ 12 (elephant) babar - / / - | @ 11 () c_zeta - | | - o | 10 (monkey) Huc - | | - o | 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -extra setup for topic -(making sure tip is not the topic) - - $ hg up 'desc(c_zeta)' - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo 'eta' >> 'eta' - $ hg add 'eta' - $ hg commit -m 'c_eta' - $ hg log -G - @ 16 () c_eta - | - | o 15 (elephant) pompadour - | | - | o 14 (elephant) arthur - | | - +---o 13 (monkey) merge with default - | | | - | o | 12 (elephant) babar - |/ / - o | 11 () c_zeta - | | - | o 10 (monkey) Huc - | | - | o 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -Testing default destination for topic - - $ hg up 'roots(topic(elephant))' - switching to topic elephant - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg up - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - o 16 () c_eta - | - | @ 15 (elephant) pompadour - | | - | o 14 (elephant) arthur - | | - +---o 13 (monkey) merge with default - | | | - | o | 12 (elephant) babar - |/ / - o | 11 () c_zeta - | | - | o 10 (monkey) Huc - | | - | o 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -Testing default destination for topic - - $ hg up 'p1(roots(topic(elephant)))' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic elephant - marked working directory as topic: elephant - $ hg up - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - o 16 () c_eta - | - | @ 15 (elephant) pompadour - | | - | o 14 (elephant) arthur - | | - +---o 13 (monkey) merge with default - | | | - | o | 12 (elephant) babar - |/ / - o | 11 () c_zeta - | | - | o 10 (monkey) Huc - | | - | o 8 (monkey) zephir - |/ - o 6 () c_epsilon - | - o 3 () c_delta - | - o 2 () c_gamma - | - o 1 () c_beta - | - o 0 () c_alpha - - -Default destination for histedit -================================ - -By default histedit should edit with the current topic only -(even when based on other draft - - $ hg phase 'desc(c_zeta)' - 11: draft - $ HGEDITOR=cat hg histedit | grep pick - pick e44744d9ad73 12 babar - pick 38eea8439aee 14 arthur - pick 411315c48bdc 15 pompadour - # p, pick = use commit diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-fold.t --- a/tests/test-topic-fold.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -test of the fold command ------------------------- - - $ cat >> $HGRCPATH < [defaults] - > amend=-d "0 0" - > fold=-d "0 0" - > split=-d "0 0" - > amend=-d "0 0" - > [web] - > push_ssl = false - > allow_push = * - > [phases] - > publish = False - > [diff] - > git = 1 - > unified = 0 - > [ui] - > interactive = true - > [extensions] - > EOF - $ echo "topic=$(echo $(dirname $TESTDIR))/hgext3rd/topic/" >> $HGRCPATH - $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH - $ mkcommit() { - > echo "$1" > "$1" - > hg add "$1" - > hg ci -m "add $1" $2 $3 - > } - $ logtopic() { - > hg log -G -T "{rev}:{node}\ntopics: {topics}" - > } - -Check that fold keep the topic if all revisions have the topic --------------------------------------------------------------- - - $ hg init testfold - $ cd testfold - $ mkcommit ROOT - $ hg topic myfeature - marked working directory as topic: myfeature - $ mkcommit feature1 - active topic 'myfeature' grew its first changeset - $ mkcommit feature2 - $ logtopic - @ 2:d76a6166b18c835be9a487c5e21c7d260f0a1676 - | topics: myfeature - o 1:39e7a938055e87615edf675c24a10997ff05bb06 - | topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg fold --exact -r "(tip~1)::" -m "folded" - 2 changesets folded - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg stack - ### topic: myfeature - ### target: default (branch) - t1@ folded (current) - t0^ add ROOT (base) - $ logtopic - @ 3:4fd43e5bdc443dc8489edffac19bd8f93ccf1a5c - | topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg summary - parent: 3:4fd43e5bdc44 tip - folded - branch: default - commit: (clean) - update: (current) - phases: 2 draft - topic: myfeature - -Check that fold dismis the topic if not all revisions have the topic --------------------------------------------------------------------- - -(I'm not sure this behavior make senses, but now it is tested) - - $ hg topic --clear - $ mkcommit feature3 - created new head - $ hg topic myotherfeature - marked working directory as topic: myotherfeature - $ mkcommit feature4 - active topic 'myotherfeature' grew its first changeset - $ logtopic - @ 5:5ded4d6d578c37f339b0716de2e46e12ece7cbde - | topics: myotherfeature - o 4:bdf6950b9b5b7c6b377c8132667c73ec86d5734f - | topics: - o 3:4fd43e5bdc443dc8489edffac19bd8f93ccf1a5c - | topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg fold --exact -r "(tip~1)::" -m "folded 2" - active topic 'myotherfeature' is now empty - 2 changesets folded - clearing empty topic "myotherfeature" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ logtopic - @ 6:03da8f7238e9a4d708d6b8af402c91c68f271477 - | topics: - o 3:4fd43e5bdc443dc8489edffac19bd8f93ccf1a5c - | topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg summary - parent: 6:03da8f7238e9 tip - folded 2 - branch: default - commit: (clean) - update: (current) - phases: 3 draft diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-mode.t --- a/tests/test-topic-mode.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,330 +0,0 @@ - $ . "$TESTDIR/testlib/topic_setup.sh" - -Testing the config knob to forbid untopiced commit -====================================================== - - $ hg init $TESTTMP/untopic-commit - $ cd $TESTTMP/untopic-commit - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = enforce - > EOF - $ touch a b c d - $ hg add a - $ hg ci -m "Added a" - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - -(same test, checking we abort before the editor) - - $ EDITOR=cat hg ci -m "Added a" --edit - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - $ hg ci -m "added a" --config experimental.topic-mode=ignore - $ hg log - changeset: 0:a154386e50d1 - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added a - - -Testing the config knob to warn about untopiced commit -========================================================== - - $ hg init $TESTTMP/untopic-warn-commit - $ cd $TESTTMP/untopic-warn-commit - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = warning - > EOF - $ touch a b c d - $ hg add a - -(same test, checking we abort before the editor) - - $ HGEDITOR=cat hg ci -m "Added a" --edit - warning: new draft commit without topic - (see 'hg help -e topic.topic-mode' for details) - Added a - - - HG: Enter commit message. Lines beginning with 'HG:' are removed. - HG: Leave message empty to abort commit. - HG: -- - HG: user: test - HG: branch 'default' - HG: added a - - $ HGEDITOR=cat hg ci --amend -m "Added a" --edit - Added a - - - HG: Enter commit message. Lines beginning with 'HG:' are removed. - HG: Leave message empty to abort commit. - HG: -- - HG: user: test - HG: branch 'default' - HG: added a - $ hg ci --amend -m "added a'" --config experimental.topic-mode=ignore - $ hg log - changeset: 2:2e862d8b5eff - tag: tip - parent: -1:000000000000 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added a' - - -Testing the config knob to warn about untopiced merge commit -================================================================ - - $ hg init $TESTTMP/test-untopic-merge-commit - $ cd $TESTTMP/test-untopic-merge-commit - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = enforce - > EOF - $ touch ROOT - $ hg commit -A -m "ROOT" --config experimental.topic-mode=ignore - adding ROOT - $ touch a - $ hg add a - $ hg topic mytopic - marked working directory as topic: mytopic - $ hg ci -m "Added a" - active topic 'mytopic' grew its first changeset - - $ hg up -r "desc('ROOT')" - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ touch default - $ hg add default - $ hg commit -m "default" --config experimental.topic-mode=ignore - - $ hg merge mytopic - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg commit -m "merge mytopic" - warning: new draft commit without topic - (see 'hg help -e topic.topic-mode' for details) - - $ hg log -G - @ changeset: 3:676a445d1c09 - |\ tag: tip - | | parent: 2:a4da109ee59f - | | parent: 1:e5b6c632bd8e - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: merge mytopic - | | - | o changeset: 2:a4da109ee59f - | | parent: 0:ec1d2790416d - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: default - | | - o | changeset: 1:e5b6c632bd8e - |/ topic: mytopic - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Added a - | - o changeset: 0:ec1d2790416d - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - -Testing the config knob to about on untopiced merge commit -================================================================ - - $ hg init $TESTTMP/test-untopic-merge-commit-abort - $ cd $TESTTMP/test-untopic-merge-commit-abort - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = enforce-all - > EOF - $ touch ROOT - $ hg commit -A -m "ROOT" --config experimental.topic-mode=ignore - adding ROOT - $ touch a - $ hg add a - $ hg topic mytopic - marked working directory as topic: mytopic - $ hg ci -m "Added a" - active topic 'mytopic' grew its first changeset - - $ hg up -r "desc('ROOT')" - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ touch default - $ hg add default - $ hg commit -m "default" --config experimental.topic-mode=ignore - - $ hg merge mytopic - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg commit -m "merge mytopic" - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - - $ hg log -G - @ changeset: 2:a4da109ee59f - | tag: tip - | parent: 0:ec1d2790416d - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: default - | - | @ changeset: 1:e5b6c632bd8e - |/ topic: mytopic - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Added a - | - o changeset: 0:ec1d2790416d - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - -Testing the config knob to use a random topic for untopic commit -==================================================================== - - $ hg init $TESTTMP/test-untopic-random - $ cd $TESTTMP/test-untopic-random - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = random - > EOF - - $ touch ROOT - $ hg commit -A -m "ROOT" --config experimental.topic-mode=ignore - adding ROOT - - $ touch A - $ hg add A - $ hg commit -m "Add A" --config devel.randomseed=42 - active topic 'panoramic-antelope' grew its first changeset - - $ hg up -r "desc(ROOT)" - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - - $ touch B - $ hg add B - $ hg commit -m "Add B" --config devel.randomseed=128 - active topic 'various-dove' grew its first changeset - -Test a merge too - - $ hg phase --public -r . - active topic 'various-dove' is now empty - $ hg up default - clearing empty topic "various-dove" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - @ changeset: 2:2d2acb6efad5 - | tag: tip - | parent: 0:ec1d2790416d - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add B - | - | o changeset: 1:d4b548f35972 - |/ topic: panoramic-antelope - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add A - | - o changeset: 0:ec1d2790416d - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg merge panoramic-antelope - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg ci -m 'merge' -Testing the config knob to use a random topic for untopic commit (even for merge) -================================================================================= - - $ hg init $TESTTMP/test-untopic-random-all - $ cd $TESTTMP/test-untopic-random-all - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = random-all - > EOF - - $ touch ROOT - $ hg commit -A -m "ROOT" --config experimental.topic-mode=ignore - adding ROOT - - $ touch A - $ hg add A - $ hg commit -m "Add A" --config devel.randomseed=42 - active topic 'panoramic-antelope' grew its first changeset - - $ hg up -r "desc(ROOT)" - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - - $ touch B - $ hg add B - $ hg commit -m "Add B" --config devel.randomseed=128 - active topic 'various-dove' grew its first changeset - -Test a merge too - - $ hg phase --public -r . - active topic 'various-dove' is now empty - $ hg up default - clearing empty topic "various-dove" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -G - @ changeset: 2:2d2acb6efad5 - | tag: tip - | parent: 0:ec1d2790416d - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add B - | - | o changeset: 1:d4b548f35972 - |/ topic: panoramic-antelope - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add A - | - o changeset: 0:ec1d2790416d - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: ROOT - - $ hg merge panoramic-antelope - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg ci -m 'merge' --config devel.randomseed=1337 - active topic 'omniscient-locust' grew its first changeset diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-push-concurrent-on.t --- a/tests/test-topic-push-concurrent-on.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,426 +0,0 @@ -# same as test-topic-push but with the concurrent push feature on - - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ cat << EOF >> $HGRCPATH - > [ui] - > logtemplate = {rev} {branch} {get(namespaces, "topics")} {phase} {desc|firstline}\n - > ssh =python "$RUNTESTDIR/dummyssh" - > [server] - > concurrent-push-mode=check-related - > EOF - - $ hg init main - $ hg init draft - $ cat << EOF >> draft/.hg/hgrc - > [phases] - > publish=False - > EOF - $ hg clone main client - updating to branch default - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat << EOF >> client/.hg/hgrc - > [paths] - > draft=../draft - > EOF - - -Testing core behavior to make sure we did not break anything -============================================================ - -Pushing a first changeset - - $ cd client - $ echo aaa > aaa - $ hg add aaa - $ hg commit -m 'CA' - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 0 default draft CA - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - -Pushing two heads - - $ echo aaa > bbb - $ hg add bbb - $ hg commit -m 'CB' - $ echo aaa > ccc - $ hg up 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg add ccc - $ hg commit -m 'CC' - created new head - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 2 default draft CC - - o 1 default draft CB - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote head 9fe81b7f425d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg outgoing -r 'desc(CB)' -G - comparing with $TESTTMP/main (glob) - searching for changes - o 1 default draft CB - - $ hg push -r 'desc(CB)' - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - -Pushing a new branch - - $ hg branch mountain - marked working directory as branch mountain - (branches are permanent and global, did you want a bookmark?) - $ hg commit --amend - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 4 mountain draft CC - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote branches: mountain! - (use 'hg push --new-branch' to create new remote branches) - [255] - $ hg push --new-branch - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers - -Including on non-publishing - - $ hg push --new-branch draft - pushing to $TESTTMP/draft (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files (+1 heads) - 2 new obsolescence markers - -Testing topic behavior -====================== - -Local peer tests ----------------- - - $ hg up -r 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic babar - marked working directory as topic: babar - $ echo aaa > ddd - $ hg add ddd - $ hg commit -m 'CD' - active topic 'babar' grew its first changeset - $ hg log -G # keep track of phase because I saw some strange bug during developement - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server should not be seen as a new head - - $ hg push draft - pushing to $TESTTMP/draft (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - $ hg log -G - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a publishing server should be seen as a new head - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote head 67f579af159d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -wireprotocol tests ------------------- - - $ hg up -r 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic celeste - marked working directory as topic: celeste - $ echo aaa > eee - $ hg add eee - $ hg commit -m 'CE' - active topic 'celeste' grew its first changeset - $ hg log -G # keep track of phase because I saw some strange bug during developement - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server without topic -> new head - - $ cat << EOF >> ../draft/.hg/hgrc - > [extensions] - > topic=! - > EOF - $ hg push ssh://user@dummy/draft - pushing to ssh://user@dummy/draft - searching for changes - abort: push creates new remote head 84eaf32db6c3! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server should not be seen as a new head - - $ printf "topic=" >> ../draft/.hg/hgrc - $ hg config extensions.topic >> ../draft/.hg/hgrc - $ hg push ssh://user@dummy/draft - pushing to ssh://user@dummy/draft - searching for changes - remote: adding changesets - remote: adding manifests - remote: adding file changes - remote: added 1 changesets with 1 changes to 1 files (+1 heads) - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a publishing server should be seen as a new head - - $ hg push ssh://user@dummy/main - pushing to ssh://user@dummy/main - searching for changes - abort: push creates new remote head 67f579af159d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Check that we reject multiple head on the same topic ----------------------------------------------------- - - $ hg up 'desc(CB)' - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic babar - marked working directory as topic: babar - $ echo aaa > fff - $ hg add fff - $ hg commit -m 'CF' - $ hg log -G - @ 7 default babar draft CF - | - | o 6 default celeste draft CE - | | - | | o 5 default babar draft CD - | |/ - | | o 4 mountain public CC - | |/ - o | 1 default public CB - |/ - o 0 default public CA - - - $ hg push draft - pushing to $TESTTMP/draft (glob) - searching for changes - abort: push creates new remote head f0bc62a661be on branch 'default:babar'! - (merge or see 'hg help push' for details about pushing new heads) - [255] - -Multiple head on a branch merged in a topic changesets ------------------------------------------------------------------------- - - - $ hg up 'desc(CA)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo aaa > ggg - $ hg add ggg - $ hg commit -m 'CG' - created new head - $ hg up 'desc(CF)' - switching to topic babar - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg merge 'desc(CG)' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg commit -m 'CM' - $ hg log -G - @ 9 default babar draft CM - |\ - | o 8 default draft CG - | | - o | 7 default babar draft CF - | | - | | o 6 default celeste draft CE - | |/ - | | o 5 default babar draft CD - | |/ - | | o 4 mountain public CC - | |/ - o | 1 default public CB - |/ - o 0 default public CA - - -Reject when pushing to draft - - $ hg push draft -r . - pushing to $TESTTMP/draft (glob) - searching for changes - abort: push creates new remote head 4937c4cad39e! - (merge or see 'hg help push' for details about pushing new heads) - [255] - - -Reject when pushing to publishing - - $ hg push -r . - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 2 changes to 2 files - - $ cd .. - -Test phase move -================================== - -setup, two repo knowns about two small topic branch - - $ hg init repoA - $ hg clone repoA repoB - updating to branch default - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat << EOF >> repoA/.hg/hgrc - > [phases] - > publish=False - > EOF - $ cat << EOF >> repoB/.hg/hgrc - > [phases] - > publish=False - > EOF - $ cd repoA - $ echo aaa > base - $ hg add base - $ hg commit -m 'CBASE' - $ echo aaa > aaa - $ hg add aaa - $ hg topic topicA - marked working directory as topic: topicA - $ hg commit -m 'CA' - active topic 'topicA' grew its first changeset - $ hg up 'desc(CBASE)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo aaa > bbb - $ hg add bbb - $ hg topic topicB - marked working directory as topic: topicB - $ hg commit -m 'CB' - active topic 'topicB' grew its first changeset - $ cd .. - $ hg push -R repoA repoB - pushing to repoB - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files (+1 heads) - $ hg log -G -R repoA - @ 2 default topicB draft CB - | - | o 1 default topicA draft CA - |/ - o 0 default draft CBASE - - -We turn different topic to public on each side, - - $ hg -R repoA phase --public topicA - $ hg -R repoB phase --public topicB - -Pushing should complain because it create to heads on default - - $ hg push -R repoA repoB - pushing to repoB - searching for changes - no changes found - abort: push create a new head on branch "default" - [255] diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-push.t --- a/tests/test-topic-push.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,477 +0,0 @@ - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ cat << EOF >> $HGRCPATH - > [ui] - > logtemplate = {rev} {branch} {get(namespaces, "topics")} {phase} {desc|firstline}\n - > ssh =python "$RUNTESTDIR/dummyssh" - > EOF - - $ hg init main - $ hg init draft - $ cat << EOF >> draft/.hg/hgrc - > [phases] - > publish=False - > EOF - $ hg clone main client - updating to branch default - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat << EOF >> client/.hg/hgrc - > [paths] - > draft=../draft - > EOF - - -Testing core behavior to make sure we did not break anything -============================================================ - -Pushing a first changeset - - $ cd client - $ echo aaa > aaa - $ hg add aaa - $ hg commit -m 'CA' - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 0 default draft CA - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - -Pushing two heads - - $ echo aaa > bbb - $ hg add bbb - $ hg commit -m 'CB' - $ echo aaa > ccc - $ hg up 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg add ccc - $ hg commit -m 'CC' - created new head - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 2 default draft CC - - o 1 default draft CB - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote head 9fe81b7f425d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg outgoing -r 'desc(CB)' -G - comparing with $TESTTMP/main (glob) - searching for changes - o 1 default draft CB - - $ hg push -r 'desc(CB)' - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - -Pushing a new branch - - $ hg branch mountain - marked working directory as branch mountain - (branches are permanent and global, did you want a bookmark?) - $ hg commit --amend - $ hg outgoing -G - comparing with $TESTTMP/main (glob) - searching for changes - @ 4 mountain draft CC - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote branches: mountain! - (use 'hg push --new-branch' to create new remote branches) - [255] - $ hg push --new-branch - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - 2 new obsolescence markers - -Including on non-publishing - - $ hg push --new-branch draft - pushing to $TESTTMP/draft (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files (+1 heads) - 2 new obsolescence markers - -Testing topic behavior -====================== - -Local peer tests ----------------- - - $ hg up -r 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic babar - marked working directory as topic: babar - $ echo aaa > ddd - $ hg add ddd - $ hg commit -m 'CD' - active topic 'babar' grew its first changeset - $ hg log -G # keep track of phase because I saw some strange bug during developement - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server should not be seen as a new head - - $ hg push draft - pushing to $TESTTMP/draft (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - $ hg log -G - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - -push --topic - - $ hg log -G -R $TESTTMP/draft - o 3 default babar draft CD - | - | o 2 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - $ echo bbb >> aaa - $ hg commit -m "C'A" - $ hg up 1 - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic --clear - $ echo bbb >> bbb - $ hg commit -m "C'B" - $ hg log -G - @ 7 default draft C'B - | - | o 6 default babar draft C'A - | | - | o 5 default babar draft CD - | | - | | o 4 mountain public CC - | |/ - o | 1 default public CB - |/ - o 0 default public CA - - $ hg outgoing draft --topic babar - comparing with $TESTTMP/draft - searching for changes - 6 default babar draft C'A - $ hg push draft --topic babar - pushing to $TESTTMP/draft - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - $ hg log -G -R $TESTTMP/draft - o 4 default babar draft C'A - | - o 3 default babar draft CD - | - | o 2 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - $ hg strip --config extensions.strip= --no-backup -r 7a9e34dbf547: --quiet - $ hg strip --config extensions.strip= -R $TESTTMP/draft --no-backup -r 7a9e34dbf547: --quiet - -Pushing a new topic to a publishing server should be seen as a new head - - $ hg push - pushing to $TESTTMP/main (glob) - searching for changes - abort: push creates new remote head 67f579af159d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 5 default babar draft CD - | - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -wireprotocol tests ------------------- - - $ hg up -r 'desc(CA)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic celeste - marked working directory as topic: celeste - $ echo aaa > eee - $ hg add eee - $ hg commit -m 'CE' - active topic 'celeste' grew its first changeset - $ hg log -G # keep track of phase because I saw some strange bug during developement - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server without topic -> new head - - $ cat << EOF >> ../draft/.hg/hgrc - > [extensions] - > topic=! - > EOF - $ hg push ssh://user@dummy/draft - pushing to ssh://user@dummy/draft - searching for changes - abort: push creates new remote head 84eaf32db6c3! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a non publishing server should not be seen as a new head - - $ printf "topic=" >> ../draft/.hg/hgrc - $ hg config extensions.topic >> ../draft/.hg/hgrc - $ hg push ssh://user@dummy/draft - pushing to ssh://user@dummy/draft - searching for changes - remote: adding changesets - remote: adding manifests - remote: adding file changes - remote: added 1 changesets with 1 changes to 1 files (+1 heads) - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Pushing a new topic to a publishing server should be seen as a new head - - $ hg push ssh://user@dummy/main - pushing to ssh://user@dummy/main - searching for changes - abort: push creates new remote head 67f579af159d! - (merge or see 'hg help push' for details about pushing new heads) - [255] - $ hg log -G - @ 6 default celeste draft CE - | - | o 5 default babar draft CD - |/ - | o 4 mountain public CC - |/ - | o 1 default public CB - |/ - o 0 default public CA - - -Check that we reject multiple head on the same topic ----------------------------------------------------- - - $ hg up 'desc(CB)' - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic babar - marked working directory as topic: babar - $ echo aaa > fff - $ hg add fff - $ hg commit -m 'CF' - $ hg log -G - @ 7 default babar draft CF - | - | o 6 default celeste draft CE - | | - | | o 5 default babar draft CD - | |/ - | | o 4 mountain public CC - | |/ - o | 1 default public CB - |/ - o 0 default public CA - - - $ hg push draft - pushing to $TESTTMP/draft (glob) - searching for changes - abort: push creates new remote head f0bc62a661be on branch 'default:babar'! - (merge or see 'hg help push' for details about pushing new heads) - [255] - -Multiple head on a branch merged in a topic changesets ------------------------------------------------------------------------- - - - $ hg up 'desc(CA)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo aaa > ggg - $ hg add ggg - $ hg commit -m 'CG' - created new head - $ hg up 'desc(CF)' - switching to topic babar - 2 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg merge 'desc(CG)' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (branch merge, don't forget to commit) - $ hg commit -m 'CM' - $ hg log -G - @ 9 default babar draft CM - |\ - | o 8 default draft CG - | | - o | 7 default babar draft CF - | | - | | o 6 default celeste draft CE - | |/ - | | o 5 default babar draft CD - | |/ - | | o 4 mountain public CC - | |/ - o | 1 default public CB - |/ - o 0 default public CA - - -Reject when pushing to draft - - $ hg push draft -r . - pushing to $TESTTMP/draft (glob) - searching for changes - abort: push creates new remote head 4937c4cad39e! - (merge or see 'hg help push' for details about pushing new heads) - [255] - - -Reject when pushing to publishing - - $ hg push -r . - pushing to $TESTTMP/main (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 2 changes to 2 files - - $ cd .. - -Test phase move -================================== - -setup, two repo knowns about two small topic branch - - $ hg init repoA - $ hg clone repoA repoB - updating to branch default - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cat << EOF >> repoA/.hg/hgrc - > [phases] - > publish=False - > EOF - $ cat << EOF >> repoB/.hg/hgrc - > [phases] - > publish=False - > EOF - $ cd repoA - $ echo aaa > base - $ hg add base - $ hg commit -m 'CBASE' - $ echo aaa > aaa - $ hg add aaa - $ hg topic topicA - marked working directory as topic: topicA - $ hg commit -m 'CA' - active topic 'topicA' grew its first changeset - $ hg up 'desc(CBASE)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo aaa > bbb - $ hg add bbb - $ hg topic topicB - marked working directory as topic: topicB - $ hg commit -m 'CB' - active topic 'topicB' grew its first changeset - $ cd .. - $ hg push -R repoA repoB - pushing to repoB - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 3 files (+1 heads) - $ hg log -G -R repoA - @ 2 default topicB draft CB - | - | o 1 default topicA draft CA - |/ - o 0 default draft CBASE - - -We turn different topic to public on each side, - - $ hg -R repoA phase --public topicA - $ hg -R repoB phase --public topicB - -Pushing should complain because it create to heads on default - - $ hg push -R repoA repoB - pushing to repoB - searching for changes - no changes found - abort: push create a new head on branch "default" - [255] diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-rebase.t --- a/tests/test-topic-rebase.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -test of the rebase command --------------------------- - - $ cat >> $HGRCPATH < [defaults] - > amend=-d "0 0" - > fold=-d "0 0" - > split=-d "0 0" - > amend=-d "0 0" - > [web] - > push_ssl = false - > allow_push = * - > [phases] - > publish = False - > [diff] - > git = 1 - > unified = 0 - > [ui] - > interactive = true - > [extensions] - > rebase= - > EOF - $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH - $ echo "topic=$(echo $(dirname $TESTDIR))/hgext3rd/topic/" >> $HGRCPATH - $ mkcommit() { - > echo "$1" > "$1" - > hg add "$1" - > hg ci -m "add $1" $2 $3 - > } - $ logtopic() { - > hg log -G -T "{rev}:{node}\ntopics: {topics}" - > } - -Check that rebase keep the topic in the simple case (1 changeset, no merge conflict) ------------------------------------------------------------------------------------- - - $ hg init testrebase - $ cd testrebase - $ mkcommit ROOT - -Work on myfeature - $ hg topic myfeature - marked working directory as topic: myfeature - $ mkcommit feature1 - active topic 'myfeature' grew its first changeset - $ hg stack - ### topic: myfeature - ### target: default (branch) - t1@ add feature1 (current) - t0^ add ROOT (base) - $ logtopic - @ 1:39e7a938055e87615edf675c24a10997ff05bb06 - | topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - -Create another commit on default - $ hg update --rev default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ mkcommit default - $ logtopic - @ 2:be7622a7a0f43ba713e152f56441275f8e8711ef - | topics: - | o 1:39e7a938055e87615edf675c24a10997ff05bb06 - |/ topics: myfeature - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - -Rebase the commit - $ hg update --rev 1 - switching to topic myfeature - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg rebase - rebasing 1:39e7a938055e "add feature1" - switching to topic myfeature - $ hg stack - ### topic: myfeature - ### target: default (branch) - t1@ add feature1 (current) - t0^ add default (base) - $ logtopic - @ 3:fc6593661cf3256ba165cbccd6019ead17cc3726 - | topics: myfeature - o 2:be7622a7a0f43ba713e152f56441275f8e8711ef - | topics: - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg up 3 - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg stack - ### topic: myfeature - ### target: default (branch) - t1@ add feature1 (current) - t0^ add default (base) - -Check that rebase keep the topic in case of merge conflict ----------------------------------------------------------- - -Create a common base - $ hg topic --clear - $ echo "A" > file - $ hg commit -A -m "default2" file - created new head - -Update the common file in a topic - $ hg topic myotherfeature - marked working directory as topic: myotherfeature - $ echo "B" >> file - $ hg commit -m "myotherfeature1" - active topic 'myotherfeature' grew its first changeset - -Update the common file in default - $ hg update --rev default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo "A2" > file - $ hg commit -m "default3" - -Rebase the topic - $ hg update --rev 5 - switching to topic myotherfeature - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg rebase - rebasing 5:81f854012ec5 "myotherfeature1" - merging file - warning: conflicts while merging file! (edit, then use 'hg resolve --mark') - switching to topic myotherfeature - unresolved conflicts (see hg resolve, then hg rebase --continue) - [1] - -Resolve the conflict - $ echo A2 > file - $ echo B >> file - $ hg resolve -m - (no more unresolved files) - continue: hg rebase --continue - $ hg rebase --continue - rebasing 5:81f854012ec5 "myotherfeature1" - -Check the the commit has the right topic - - $ logtopic - @ 7:6ccb9ec4913b64f3ad719ff1ba66495a70bf35a4 - | topics: myotherfeature - o 6:0b124ef641a7a6f4715d962650d3b367e8c800be - | topics: - o 4:0cd2e1a45ac4e3f9603a05ccfa6d1c70cd759bc5 - | topics: - o 3:fc6593661cf3256ba165cbccd6019ead17cc3726 - | topics: myfeature - o 2:be7622a7a0f43ba713e152f56441275f8e8711ef - | topics: - o 0:3e7df3b3b17c6deb4a1c70e790782fdf17af96a7 - topics: - $ hg stack - ### topic: myotherfeature - ### target: default (branch) - t1@ myotherfeature1 (current) - t0^ default3 (base) - $ hg update --rev 7 - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg stack - ### topic: myotherfeature - ### target: default (branch) - t1@ myotherfeature1 (current) - t0^ default3 (base) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-shelve.t --- a/tests/test-topic-shelve.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -testing topic with shelve extension ------------------------------------- - - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ hg init repo - $ cd repo - $ cat <>.hg/hgrc - > [extensions] - > shelve= - > EOF - - $ touch a - $ echo "Hello" >> a - $ hg topic "testing-shelve" - marked working directory as topic: testing-shelve - $ hg topic - * testing-shelve (0 changesets) - $ hg ci -m "First commit" -A - adding a - active topic 'testing-shelve' grew its first changeset - $ hg topic - * testing-shelve (1 changesets) - $ echo " World" >> a - $ hg stack - ### topic: testing-shelve - ### target: default (branch) - t1@ First commit (current) - -shelve test ------------ - - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg topic - * testing-shelve (1 changesets) - $ hg stack - ### topic: testing-shelve - ### target: default (branch) - t1@ First commit (current) - -unshelve test -------------- - $ hg unshelve - unshelving change 'default' - $ hg topic - * testing-shelve (1 changesets) - $ hg stack - ### topic: testing-shelve - ### target: default (branch) - t1@ First commit (current) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-stack-data.t --- a/tests/test-topic-stack-data.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -Setup -===== - - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ hg init test-list - $ cd test-list - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > # disable the new graph style until we drop 3.7 support - > graphstyle.missing = | - > # turn evolution on - > evolution=all - > EOF - - - $ mkcommit() { - > echo "$1" > "$1" - > hg add "$1" - > hg ci -m "add $1" - > } - -Build some basic graph ----------------------- - - $ for x in base_a base_b base_c base_d base_e ; do - > mkcommit $x - > done - -Add another branch with two heads - - $ hg up 'desc(base_a)' - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ hg branch lake - marked working directory as branch lake - (branches are permanent and global, did you want a bookmark?) - $ mkcommit lake_a - $ mkcommit lake_b - $ hg up 'desc(lake_a)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ mkcommit lake_c - created new head - - -Add some topics ---------------- - -A simple topic that need rebasing - - $ hg up 'desc(base_c)' - 2 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg topic baz - marked working directory as topic: baz - $ mkcommit baz_a - active topic 'baz' grew its first changeset - $ mkcommit baz_b - -A simple topic with unstability - - $ hg up 'desc(base_d)' - 1 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg topic fuz - marked working directory as topic: fuz - $ mkcommit fuz_a - active topic 'fuz' grew its first changeset - $ mkcommit fuz_b - $ mkcommit fuz_c - $ hg up 'desc(fuz_a)' - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg commit --amend --message 'fuz1_a' - -A topic with multiple heads - - $ hg up 'desc(base_e)' - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg topic bar - marked working directory as topic: bar - $ mkcommit bar_a - active topic 'bar' grew its first changeset - $ mkcommit bar_b - $ mkcommit bar_c - $ hg up 'desc(bar_b)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ mkcommit bar_d - $ mkcommit bar_e - $ hg up 'desc(bar_d)' - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg commit --amend --message 'bar1_d' - -topic 'foo' on the multi headed branch - - $ hg up 'desc(lake_a)' - 1 files updated, 0 files merged, 7 files removed, 0 files unresolved - $ hg topic foo - marked working directory as topic: foo - $ mkcommit foo_a - active topic 'foo' grew its first changeset - $ mkcommit foo_b - -Summary -------- - - $ hg summary - parent: 21:3e54b49a3113 tip - add foo_b - branch: lake - commit: (clean) - update: 2 new changesets (update) - phases: 22 draft - unstable: 3 changesets - topic: foo - $ hg log --graph -T '{desc} ({branch}) [{topic}]' - @ add foo_b (lake) [] - | - o add foo_a (lake) [] - | - | o bar1_d (default) [] - | | - | | o add bar_e (default) [] - | | | - | | x add bar_d (default) [] - | |/ - | | o add bar_c (default) [] - | |/ - | o add bar_b (default) [] - | | - | o add bar_a (default) [] - | | - | | o fuz1_a (default) [] - | | | - | | | o add fuz_c (default) [] - | | | | - | | | o add fuz_b (default) [] - | | | | - | | | x add fuz_a (default) [] - | | |/ - | | | o add baz_b (default) [] - | | | | - | | | o add baz_a (default) [] - | | | | - +-------o add lake_c (lake) [] - | | | | - +-------o add lake_b (lake) [] - | | | | - o | | | add lake_a (lake) [] - | | | | - | o | | add base_e (default) [] - | |/ / - | o / add base_d (default) [] - | |/ - | o add base_c (default) [] - | | - | o add base_b (default) [] - |/ - o add base_a (default) [] - - -Actual Testing -============== - -basic output - - $ hg topic - bar (5 changesets, 1 troubled, 2 heads) - baz (2 changesets) - * foo (2 changesets) - fuz (3 changesets, 2 troubled) - -quiet version - - $ hg topic --quiet - bar (5 changesets, 1 troubled, 2 heads) - baz (2 changesets) - foo (2 changesets) - fuz (3 changesets, 2 troubled) - -verbose - - $ hg topic --verbose - bar (on branch: default, 5 changesets, 1 troubled, 2 heads) - baz (on branch: default, 2 changesets, 2 behind) - * foo (on branch: lake, 2 changesets, ambiguous destination: branch 'lake' has 2 heads) - fuz (on branch: default, 3 changesets, 2 troubled, 1 behind) - -json - - $ hg topic -T json - [ - { - "active": false, - "changesetcount": 5, - "headcount": 2, - "topic": "bar", - "troubledcount": 1 - }, - { - "active": false, - "changesetcount": 2, - "topic": "baz" - }, - { - "active": true, - "changesetcount": 2, - "topic": "foo" - }, - { - "active": false, - "changesetcount": 3, - "topic": "fuz", - "troubledcount": 2 - } - ] - -json --verbose - - $ hg topic -T json --verbose - [ - { - "active": false, - "branches+": "default", - "changesetcount": 5, - "headcount": 2, - "topic": "bar", - "troubledcount": 1 - }, - { - "active": false, - "behindcount": 2, - "branches+": "default", - "changesetcount": 2, - "topic": "baz" - }, - { - "active": true, - "behinderror": "ambiguous destination: branch 'lake' has 2 heads", - "branches+": "lake", - "changesetcount": 2, - "topic": "foo" - }, - { - "active": false, - "behindcount": 1, - "branches+": "default", - "changesetcount": 3, - "topic": "fuz", - "troubledcount": 2 - } - ] - -Also test this situation with 'hg stack' -======================================= - - $ hg stack bar - ### topic: bar (2 heads) - ### target: default (branch) - t5: add bar_c - t2^ add bar_b (base) - t4$ add bar_e (unstable) - t3: bar1_d - t2: add bar_b - t1: add bar_a - t0^ add base_e (base) - $ hg stack bar -v - ### topic: bar (2 heads) - ### target: default (branch) - t5(9cbadf11b44d): add bar_c - t2(e555c7e8c767)^ add bar_b (base) - t4(a920412b5a05)$ add bar_e (unstable) - t3(6915989374b1): bar1_d - t2(e555c7e8c767): add bar_b - t1(a5c2b4e00bbf): add bar_a - t0(92f489a6251f)^ add base_e (base) - $ hg stack baz - ### topic: baz - ### target: default (branch), 2 behind - t2: add baz_b - t1: add baz_a - t0^ add base_c (base) - $ hg stack foo - ### topic: foo - ### target: lake (branch), ambigious rebase destination - branch 'lake' has 2 heads - t2@ add foo_b (current) - t1: add foo_a - t0^ add lake_a (base) - $ hg stack fuz - ### topic: fuz - ### target: default (branch), 1 behind - t3$ add fuz_c (unstable) - t2$ add fuz_b (unstable) - t1: fuz1_a - t0^ add base_d (base) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-stack.t --- a/tests/test-topic-stack.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,917 +0,0 @@ - $ . "$TESTDIR/testlib/topic_setup.sh" - -Initial setup - - - $ cat << EOF >> $HGRCPATH - > [extensions] - > color = - > [ui] - > logtemplate = {rev} {branch} \{{get(namespaces, "topics")}} {phase} {desc|firstline}\n - > [experimental] - > evolution=all - > EOF - - $ hg init main - $ cd main - $ hg topic other - marked working directory as topic: other - $ echo aaa > aaa - $ hg add aaa - $ hg commit -m c_a - active topic 'other' grew its first changeset - $ echo aaa > bbb - $ hg add bbb - $ hg commit -m c_b - $ hg topic foo - $ echo aaa > ccc - $ hg add ccc - $ hg commit -m c_c - active topic 'foo' grew its first changeset - $ 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 default {foo} draft c_f - | - o 4 default {foo} draft c_e - | - o 3 default {foo} draft c_d - | - o 2 default {foo} draft c_c - | - o 1 default {other} draft c_b - | - o 0 default {other} draft c_a - - -Check that topic without any parent does not crash --list ---------------------------------------------------------- - - $ hg up other - switching to topic other - 0 files updated, 0 files merged, 4 files removed, 0 files unresolved - $ hg topic --list - ### topic: other - ### target: default (branch) - t2@ c_b (current) - t1: c_a - $ hg phase --public 'topic("other")' - active topic 'other' is now empty - -After changing the phase of all the changesets in "other" to public, the topic should still be active, but is empty. We should be better at informating the user about it and displaying good data in this case. - - $ hg topic - foo (4 changesets) - * other (0 changesets) - $ hg stack - ### topic: other - ### target: default (branch) - (stack is empty) - t0^ c_b (base current) - - $ hg up foo - switching to topic foo - 4 files updated, 0 files merged, 0 files removed, 0 files unresolved - -Simple test ------------ - -'hg stack' list all changeset in the topic - - $ hg topic - * foo (4 changesets) - $ hg stack - ### topic: foo - ### target: default (branch) - t4@ c_f (current) - t3: c_e - t2: c_d - t1: c_c - t0^ c_b (base) - $ hg stack -v - ### topic: foo - ### target: default (branch) - t4(6559e6d93aea)@ c_f (current) - t3(0f9ac936c87d): c_e - t2(e629654d7050): c_d - t1(8522f9e3fee9): c_c - t0(ea705abc4f51)^ c_b (base) - $ hg stack -Tjson | python -m json.tool - [ - { - "isentry": true, - "topic.stack.desc": "c_f", - "topic.stack.index": 4, - "topic.stack.state": [ - "current" - ], - "topic.stack.state.symbol": "@" - }, - { - "isentry": true, - "topic.stack.desc": "c_e", - "topic.stack.index": 3, - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": true, - "topic.stack.desc": "c_d", - "topic.stack.index": 2, - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": true, - "topic.stack.desc": "c_c", - "topic.stack.index": 1, - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": false, - "topic.stack.desc": "c_b", - "topic.stack.index": 0, - "topic.stack.state": [ - "base" - ], - "topic.stack.state.symbol": "^" - } - ] - $ hg stack -v -Tjson | python -m json.tool - [ - { - "isentry": true, - "topic.stack.desc": "c_f", - "topic.stack.index": 4, - "topic.stack.shortnode": "6559e6d93aea", - "topic.stack.state": [ - "current" - ], - "topic.stack.state.symbol": "@" - }, - { - "isentry": true, - "topic.stack.desc": "c_e", - "topic.stack.index": 3, - "topic.stack.shortnode": "0f9ac936c87d", - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": true, - "topic.stack.desc": "c_d", - "topic.stack.index": 2, - "topic.stack.shortnode": "e629654d7050", - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": true, - "topic.stack.desc": "c_c", - "topic.stack.index": 1, - "topic.stack.shortnode": "8522f9e3fee9", - "topic.stack.state": [ - "clean" - ], - "topic.stack.state.symbol": ":" - }, - { - "isentry": false, - "topic.stack.desc": "c_b", - "topic.stack.index": 0, - "topic.stack.shortnode": "ea705abc4f51", - "topic.stack.state": [ - "base" - ], - "topic.stack.state.symbol": "^" - } - ] - -check that topics and stack are available even if ui.strict=true - - $ hg topics - * foo (4 changesets) - $ hg stack - ### topic: foo - ### target: default (branch) - t4@ c_f (current) - t3: c_e - t2: c_d - t1: c_c - t0^ c_b (base) - $ hg topics --config ui.strict=true - * foo (4 changesets) - $ hg stack --config ui.strict=true - ### topic: foo - ### target: default (branch) - t4@ c_f (current) - t3: c_e - t2: c_d - t1: c_c - t0^ c_b (base) - -error case, nothing to list - - $ hg topic --clear - $ hg stack - ### target: default (branch) - (stack is empty) - b0^ c_f (base current) - -Test "t#" reference -------------------- - - - $ hg up t2 - abort: cannot resolve "t2": no active topic - [255] - $ hg topic foo - marked working directory as topic: foo - $ hg up t42 - abort: cannot resolve "t42": topic "foo" has only 4 changesets - [255] - $ hg up t2 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ hg summary - parent: 3:e629654d7050 - c_d - branch: default - commit: (clean) - update: (current) - phases: 4 draft - topic: foo - -Case with some of the topic unstable ------------------------------------- - - $ echo bbb > ddd - $ hg commit --amend - $ hg log -G - @ 7 default {foo} draft c_d - | - | o 5 default {foo} draft c_f - | | - | o 4 default {foo} draft c_e - | | - | x 3 default {foo} draft c_d - |/ - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - - $ hg topic --list - ### topic: foo - ### target: default (branch) - t4$ c_f (unstable) - t3$ c_e (unstable) - t2@ c_d (current) - t1: c_c - t0^ c_b (base) - $ hg up t3 - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg topic --list - ### topic: foo - ### target: default (branch) - t4$ c_f (unstable) - t3$ c_e (current unstable) - t2: c_d - t1: c_c - t0^ c_b (base) - $ hg topic --list --color=debug - [topic.stack.summary.topic|### topic: [topic.active|foo]] - [topic.stack.summary.branches|### target: default (branch)] - [topic.stack.index topic.stack.index.unstable|t4][topic.stack.state topic.stack.state.unstable|$] [topic.stack.desc topic.stack.desc.unstable|c_f][topic.stack.state topic.stack.state.unstable| (unstable)] - [topic.stack.index topic.stack.index.current topic.stack.index.unstable|t3][topic.stack.state topic.stack.state.current topic.stack.state.unstable|$] [topic.stack.desc topic.stack.desc.current topic.stack.desc.unstable|c_e][topic.stack.state topic.stack.state.current topic.stack.state.unstable| (current unstable)] - [topic.stack.index topic.stack.index.clean|t2][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_d] - [topic.stack.index topic.stack.index.clean|t1][topic.stack.state topic.stack.state.clean|:] [topic.stack.desc topic.stack.desc.clean|c_c] - [topic.stack.index topic.stack.index.base|t0][topic.stack.state topic.stack.state.base|^] [topic.stack.desc topic.stack.desc.base|c_b][topic.stack.state topic.stack.state.base| (base)] - $ hg up t2 - 1 files updated, 0 files merged, 1 files removed, 0 files unresolved - -Also test the revset: - - $ hg log -r 'stack()' - 2 default {foo} draft c_c - 7 default {foo} draft c_d - 4 default {foo} draft c_e - 5 default {foo} draft c_f - - $ hg log -r 'stack(foo)' - hg: parse error: stack() takes no argument, it works on current topic - [255] - - $ hg log -r 'stack(foobar)' - hg: parse error: stack() takes no argument, it works on current topic - [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:0f9ac936c87d "c_e" - rebasing 5:6559e6d93aea "c_f" - $ hg log -G - o 9 default {foo} draft c_f - | - o 8 default {foo} draft c_e - | - @ 7 default {foo} draft c_d - | - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} 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 - $ echo aaa > hhh - $ hg add hhh - $ hg commit -m c_h - $ hg log -G - @ 11 default {foo} draft c_h - | - o 10 default {foo} draft c_g - | - | o 9 default {foo} draft c_f - | | - | o 8 default {foo} draft c_e - |/ - o 7 default {foo} draft c_d - | - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - - -Test output - - $ hg top -l - ### topic: foo (2 heads) - ### target: default (branch) - t6: c_f - t5: c_e - t2^ c_d (base) - t4@ c_h (current) - t3: c_g - t2: c_d - t1: c_c - t0^ c_b (base) - -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:81264ae8a36a "c_g" - rebasing 11:fde5f5941642 "c_h" - $ hg log -G - o 15 default {foo} draft c_h - | - o 14 default {foo} draft c_g - | - @ 13 default {foo} draft c_D - | - | o 9 default {foo} draft c_f - | | - | o 8 default {foo} draft c_e - | | - | x 7 default {foo} draft c_d - |/ - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - - - $ hg topic --list - ### topic: foo (2 heads) - ### target: default (branch) - t6$ c_f (unstable) - t5$ c_e (unstable) - t2^ c_D (base current) - t4: c_h - t3: c_g - t2@ c_D (current) - t1: c_c - t0^ c_b (base) - -Trying to list non existing topic - $ hg stack thisdoesnotexist - abort: cannot resolve "thisdoesnotexist": no such topic found - [255] - $ hg topic --list thisdoesnotexist - abort: cannot resolve "thisdoesnotexist": no such topic found - [255] - -Complex cases where commits with same topic are not consecutive but are linear -============================================================================== - - $ hg log --graph - o 15 default {foo} draft c_h - | - o 14 default {foo} draft c_g - | - @ 13 default {foo} draft c_D - | - | o 9 default {foo} draft c_f - | | - | o 8 default {foo} draft c_e - | | - | x 7 default {foo} draft c_d - |/ - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - -Converting into a linear chain - $ hg rebase -s 'desc("c_e") - obsolete()' -d 'desc("c_h") - obsolete()' - rebasing 8:215bc359096a "c_e" - rebasing 9:ec9267b3f33f "c_f" - - $ hg log -G - o 17 default {foo} draft c_f - | - o 16 default {foo} draft c_e - | - o 15 default {foo} draft c_h - | - o 14 default {foo} draft c_g - | - @ 13 default {foo} draft c_D - | - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - -Changing topics on some commits in between - $ hg topic foobar -r 'desc(c_e) + desc(c_D)' - switching to topic foobar - changed topic on 2 changes - $ hg log -G - @ 19 default {foobar} draft c_D - | - | o 18 default {foobar} draft c_e - | | - | | o 17 default {foo} draft c_f - | | | - | | x 16 default {foo} draft c_e - | |/ - | o 15 default {foo} draft c_h - | | - | o 14 default {foo} draft c_g - | | - | x 13 default {foo} draft c_D - |/ - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - - $ hg rebase -s 'desc("c_f") - obsolete()' -d 'desc("c_e") - obsolete()' - rebasing 17:77082e55de88 "c_f" - switching to topic foo - switching to topic foobar - $ hg rebase -s 'desc("c_g") - obsolete()' -d 'desc("c_D") - obsolete()' - rebasing 14:0c3e8aed985d "c_g" - switching to topic foo - rebasing 15:b9e4f3709bc5 "c_h" - rebasing 18:4bc813530301 "c_e" - switching to topic foobar - rebasing 20:4406ea4be852 "c_f" (tip) - switching to topic foo - switching to topic foobar - $ hg up - 3 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log --graph - o 24 default {foo} draft c_f - | - @ 23 default {foobar} draft c_e - | - o 22 default {foo} draft c_h - | - o 21 default {foo} draft c_g - | - o 19 default {foobar} draft c_D - | - o 2 default {foo} draft c_c - | - o 1 default {} public c_b - | - o 0 default {} public c_a - -XXX: The following should show single heads -XXX: The behind count is weird, because the topic are interleaved. - - $ hg stack - ### topic: foobar - ### target: default (branch), 3 behind - t2@ c_e (current) - ^ c_h - t1: c_D - t0^ c_c (base) - - $ hg stack foo - ### topic: foo - ### target: default (branch), ambigious rebase destination - topic 'foo' has 3 heads - t4: c_f - ^ c_e - t3: c_h - t2: c_g - ^ c_D - t1: c_c - t0^ c_b (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 - marked working directory as topic: red - $ echo bbb > bbb - $ hg commit -Am 'c_B' - adding bbb - active topic 'red' grew its first changeset - $ echo ccc > ccc - $ hg commit -Am 'c_C' - adding ccc - $ hg topic blue - $ echo ddd > ddd - $ hg commit -Am 'c_D' - adding ddd - active topic 'blue' grew its first changeset - $ 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 - ### target: default (branch), 6 behind - t5: c_H - ^ c_G - ^ c_D - t4: c_C - t1^ c_B (base) - t3: c_F - t2: c_E - t1: c_B - t0^ c_A (base) - $ hg stack blue - ### topic: blue - ### target: default (branch), ambigious rebase destination - topic 'blue' has 3 heads - t3@ c_I (current) - ^ c_H - t2: c_D - ^ c_C - t1: c_G - t0^ c_F (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 - ### target: default (branch), ambigious rebase destination - topic 'red' has 3 heads - t5$ c_H (unstable) - ^ c_G - ^ 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 - ### target: default (branch), ambigious rebase destination - topic 'blue' has 3 heads - t3$ c_I (unstable) - ^ c_H - t2$ c_G (unstable) - ^ c_F - t1$ c_D (current unstable) - t0^ c_C (base unstable) - -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 - ### target: default (branch), ambigious rebase destination - topic 'red' has 3 heads - t5$ c_H (unstable) - ^ c_G - ^ 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 - ### target: default (branch), ambigious rebase destination - topic 'blue' has 3 heads - t3$ c_I (unstable) - ^ c_H - t2$ c_G (unstable) - ^ c_F - t1$ c_D (current unstable) - t0^ c_C (base unstable) - -Test stack behavior with a split --------------------------------- - -get things linear again - - $ hg rebase -r t1 -d default - rebasing 16:1d84ec948370 "c_D" (tip) - switching to topic blue - $ hg rebase -r t2 -d t1 - rebasing 13:3ab2eedae500 "c_G" - $ hg rebase -r t3 -d t2 - rebasing 8:3bfe800e0486 "c_I" - $ hg stack - ### topic: blue - ### target: default (branch) - t3: c_I - t2: c_G - t1@ c_D (current) - t0^ c_A (base) - -making a split -(first get something to split) - - $ hg up t2 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg status --change . - A ggg - $ echo zzz > Z - $ hg add Z - $ hg commit --amend - $ hg status --change . - A Z - A ggg - $ hg stack - ### topic: blue - ### target: default (branch) - t3$ c_I (unstable) - t2@ c_G (current) - t1: c_D - t0^ c_A (base) - $ hg --config extensions.evolve= --config ui.interactive=yes split --date '0 0' << EOF - > y - > y - > n - > y - > EOF - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - adding Z - adding ggg - diff --git a/Z b/Z - new file mode 100644 - examine changes to 'Z'? [Ynesfdaq?] y - - @@ -0,0 +1,1 @@ - +zzz - record change 1/2 to 'Z'? [Ynesfdaq?] y - - diff --git a/ggg b/ggg - new file mode 100644 - examine changes to 'ggg'? [Ynesfdaq?] n - - Done splitting? [yN] y - - $ hg --config extensions.evolve= obslog --all - o dde94df880e9 (22) c_G - | - | @ e7ea874afbd5 (23) c_G - |/ - x b24bab30ac12 (21) c_G - | rewritten(parent, content) as dde94df880e9, e7ea874afbd5 by test (*) (glob) - | - x 907f7d3c2333 (18) c_G - | rewritten as b24bab30ac12 by test (*) (glob) - | - x 3ab2eedae500 (13) c_G - | rewritten as 907f7d3c2333 by test (*) (glob) - | - x c7d60a180d05 (6) c_G - rewritten as 3ab2eedae500 by test (*) (glob) - - $ hg export . - # HG changeset patch - # User test3 - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID e7ea874afbd5c17aeee366d39a828dbcb01682ce - # Parent dde94df880e97f4a1ee8c5408254b429b3d90204 - # EXP-Topic blue - c_G - - diff -r dde94df880e9 -r e7ea874afbd5 ggg - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/ggg Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +ggg - $ hg export .^ - # HG changeset patch - # User test3 - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID dde94df880e97f4a1ee8c5408254b429b3d90204 - # Parent f3328cd199dc389b850ca952f65a15a8e6dbc79b - # EXP-Topic blue - c_G - - diff -r f3328cd199dc -r dde94df880e9 Z - --- /dev/null Thu Jan 01 00:00:00 1970 +0000 - +++ b/Z Thu Jan 01 00:00:00 1970 +0000 - @@ -0,0 +1,1 @@ - +zzz - -Check that stack ouput still make sense - - $ hg stack - ### topic: blue - ### target: default (branch) - t4$ c_I (unstable) - t3@ c_G (current) - t2: c_G - t1: c_D - t0^ c_A (base) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic-tutorial.t --- a/tests/test-topic-tutorial.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1882 +0,0 @@ -============== -Topic Tutorial -============== - -This Mercurial configuration example is used for testing. - -.. Various setup - - $ . "$TESTDIR/testlib/topic_setup.sh" - $ cat >> $HGRCPATH << EOF - > [experimental] - > evolution=all - > [extensions] - > evolve= - > EOF - - $ hg init server - - $ cd server - - $ cat >> .hg/hgrc << EOF - > [ui] - > user= Shopping Master - > EOF - - $ cat >> shopping << EOF - > Spam - > Whizzo butter - > Albatross - > Rat (rather a lot) - > Jugged fish - > Blancmange - > Salmon mousse - > EOF - - $ hg commit -A -m "Shopping list" - adding shopping - - $ cd .. - $ hg clone server client - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cd client - $ cat >> .hg/hgrc << EOF - > [ui] - > user= Tutorial User - > EOF -#if docgraph-ext - $ . "$TESTDIR/testlib/docgraph_setup.sh" #rest-ignore -#endif - -Topic branches are lightweight branches which disappear when changes are -finalized (moved to the public phase). They can help users to organize and share -their unfinished work. - -In this tutorial, we explain how to use topics for local development. In the first part, -there is a central *publishing* server. Anything pushed to the central server will become public and immutable This means no unfinished work should escapes the local repository. - - -Topic Basics -============ - -Let's say we use Mercurial to manage our shopping list: - - $ hg log --graph - @ changeset: 0:38da43f0a2ea - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - } -#endif - -We are about to make some additions to this list and would like to do them -within a topic. Creating a new topic is done using the ``topic`` command: - - $ hg topics food - marked working directory as topic: food - -Much like a named branch, our topic is active but it does not contain any -changeset yet: - - $ hg topics - * food (0 changesets) - - $ hg summary - parent: 0:38da43f0a2ea tip - Shopping list - branch: default - commit: (clean) - update: (current) - topic: food - - $ hg log --graph - @ changeset: 0:38da43f0a2ea - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - } -#endif - -Our next commit will be part of the active topic: - - $ cat >> shopping << EOF - > Egg - > Suggar - > Vinegar - > Oil - > EOF - - $ hg commit -m "adding condiments" - active topic 'food' grew its first changeset - - $ hg log --graph --rev 'topic("food")' - @ changeset: 1:13900241408b - | tag: tip - ~ topic: food - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: adding condiments - - -#if docgraph-ext - $ hg docgraph -r "topic("food")" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 1 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=1, - pin=true, - pos="1,1!", - shape=pentagon, - style=filled, - width=0.5]; - } -#endif - -And future commits will be part of that topic too: - - $ cat >> shopping << EOF - > Bananas - > Pear - > Apple - > EOF - - $ hg commit -m "adding fruits" - - $ hg log --graph --rev 'topic("food")' - @ changeset: 2:287de11b401f - | tag: tip - | topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 1:13900241408b - | topic: food - ~ user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: adding condiments - - -#if docgraph-ext - $ hg docgraph -r "topic("food")" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 1 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=1, - pin=true, - pos="1,1!", - shape=pentagon, - style=filled, - width=0.5]; - 2 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=2, - pin=true, - pos="1,2!", - shape=pentagon, - style=filled, - width=0.5]; - 1 -> 2 [arrowhead=none, - penwidth=2.0]; - } -#endif - -We can get a compact view of the content of our topic using the ``stack`` -command: - - $ hg stack - ### topic: food - ### target: default (branch) - t2@ adding fruits (current) - t1: adding condiments - t0^ Shopping list (base) - -The topic deactivates when we update away from it: - - $ hg update default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg topics - food (2 changesets) - -Note that ``default`` (name of the branch) now refers to the tipmost -changeset of default without a topic: - - $ hg log --graph - o changeset: 2:287de11b401f - | tag: tip - | topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 1:13900241408b - | topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - @ changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 1 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=1, - pin=true, - pos="1,1!", - shape=pentagon, - style=filled, - width=0.5]; - 0 -> 1 [arrowhead=none, - penwidth=2.0]; - 2 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=2, - pin=true, - pos="1,2!", - shape=pentagon, - style=filled, - width=0.5]; - 1 -> 2 [arrowhead=none, - penwidth=2.0]; - } -#endif -And updating back to the topic reactivates it: - - $ hg update food - switching to topic food - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg topics - * food (2 changesets) - -Updating to any changeset that is part of a topic activates the topic -regardless of how the revision was specified: - - $ hg update default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg update --rev 'desc("condiments")' - switching to topic food - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg topics - * food (2 changesets) - -.. Server side activity: - - $ cd ../server/ - $ cat > shopping << EOF - > T-Shirt - > Trousers - > Spam - > Whizzo butter - > Albatross - > Rat (rather a lot) - > Jugged fish - > Blancmange - > Salmon mousse - > EOF - - $ hg commit -A -m "Adding clothes" - - $ cd ../client - -The topic will also affect the rebase and the merge destinations. Let's pull -the latest update from the main server: - - $ hg pull - pulling from $TESTTMP/server (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - (run 'hg heads' to see heads) - - $ hg log -G - o changeset: 3:6104862e8b84 - | tag: tip - | parent: 0:38da43f0a2ea - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding clothes - | - | o changeset: 2:287de11b401f - | | topic: food - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: adding fruits - | | - | @ changeset: 1:13900241408b - |/ topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - o changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 1 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=1, - pin=true, - pos="1,1!", - shape=pentagon, - style=filled, - width=0.5]; - 0 -> 1 [arrowhead=none, - penwidth=2.0]; - 3 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=3, - pin=true, - pos="1,3!", - shape=circle, - style=filled, - width=0.5]; - 0 -> 3 [arrowhead=none, - penwidth=2.0]; - 2 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=2, - pin=true, - pos="1,2!", - shape=pentagon, - style=filled, - width=0.5]; - 1 -> 2 [arrowhead=none, - penwidth=2.0]; - } -#endif - -The topic head will not be considered when merging from the new head of the -branch: - - $ hg update default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg merge - abort: branch 'default' has one head - please merge with an explicit rev - (run 'hg heads' to see all heads) - [255] - -But the topic will see that branch head as a valid destination: - - $ hg update food - switching to topic food - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg rebase - rebasing 1:13900241408b "adding condiments" - merging shopping - switching to topic food - rebasing 2:287de11b401f "adding fruits" - merging shopping - - $ hg log --graph - @ changeset: 5:2d50db8b5b4c - | tag: tip - | topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 4:4011b46eeb33 - | topic: food - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - o changeset: 3:6104862e8b84 - | parent: 0:38da43f0a2ea - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding clothes - | - o changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 3 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=3, - pin=true, - pos="1,3!", - shape=circle, - style=filled, - width=0.5]; - 0 -> 3 [arrowhead=none, - penwidth=2.0]; - 4 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=4, - pin=true, - pos="1,4!", - shape=pentagon, - style=filled, - width=0.5]; - 3 -> 4 [arrowhead=none, - penwidth=2.0]; - 5 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=5, - pin=true, - pos="1,5!", - shape=pentagon, - style=filled, - width=0.5]; - 4 -> 5 [arrowhead=none, - penwidth=2.0]; - } -#endif - -The topic information will disappear when we publish the changesets: - - $ hg topics - * food (2 changesets) - - $ hg push - pushing to $TESTTMP/server (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - 2 new obsolescence markers - active topic 'food' is now empty - - $ hg topics - * food (0 changesets) - -The topic still exists, and any new commit will be in the topic. But -note that it is now devoid of any commit. - - $ hg topics --list - ### topic: food - ### target: default (branch) - (stack is empty) - t0^ adding fruits (base current) - - $ hg log --graph - @ changeset: 5:2d50db8b5b4c - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 4:4011b46eeb33 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - o changeset: 3:6104862e8b84 - | parent: 0:38da43f0a2ea - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding clothes - | - o changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 3 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=3, - pin=true, - pos="1,3!", - shape=circle, - style=filled, - width=0.5]; - 0 -> 3 [arrowhead=none, - penwidth=2.0]; - 4 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=4, - pin=true, - pos="1,4!", - shape=circle, - style=filled, - width=0.5]; - 3 -> 4 [arrowhead=none, - penwidth=2.0]; - 5 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=5, - pin=true, - pos="1,5!", - shape=circle, - style=filled, - width=0.5]; - 4 -> 5 [arrowhead=none, - penwidth=2.0]; - } -#endif - -If we update to the *default* head, we will leave the topic behind, -and since it is commit-less, it will vanish. - - $ hg update default - clearing empty topic "food" - 0 files updated, 0 files merged, 0 files removed, 0 files unresolved - -From there, the topic has been completely forgotten. - - $ hg topics - - -Keep working within topics -========================== - -Making sure all your new local commit are made within a topic will help your -organise your work. It is possible to ensure this through the Mercurial -configuration. - -For this tutorial, we'll add the config at the repository level: - - $ cat << EOF >> .hg/hgrc - > [experimental] - > topic-mode = enforce - > EOF - -You can also use `hg config --edit` to update your mercurial configuration. - - -Once enforcement is turned on. New local commit will be denied if no topic is active. - - $ echo sickle >> shopping - $ hg commit -m 'Adding sickle' - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - -Ok, let's clean this up and delve into multiple topics. - - $ hg revert . - reverting shopping - - -Working with Multiple Topics -============================ - -In the above example, topics do not bring much benefits since you only have one -line of development. Topics start to be more useful when you have to work on -multiple features at the same time. - -We might go shopping in a hardware store in the same go, so let's add some -tools to the shopping list within a new topic: - - $ hg topics tools - marked working directory as topic: tools - $ echo hammer >> shopping - $ hg commit -m 'Adding hammer' - active topic 'tools' grew its first changeset - - $ echo saw >> shopping - $ hg commit -m 'Adding saw' - - $ echo drill >> shopping - $ hg commit -m 'Adding drill' - -But we are not sure we will actually go to the hardware store, so in the -meantime, we want to extend the list with drinks. We go back to the official -default branch and start a new topic: - - $ hg update default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg topics drinks - marked working directory as topic: drinks - $ echo 'apple juice' >> shopping - $ hg commit -m 'Adding apple juice' - active topic 'drinks' grew its first changeset - - $ echo 'orange juice' >> shopping - $ hg commit -m 'Adding orange juice' - -We now have two topics: - - $ hg topics - * drinks (2 changesets) - tools (3 changesets) - -The information displayed by ``hg stack`` adapts to the active topic: - - $ hg stack - ### topic: drinks - ### target: default (branch) - t2@ Adding orange juice (current) - t1: Adding apple juice - t0^ adding fruits (base) - - $ hg update tools - switching to topic tools - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg stack - ### topic: tools - ### target: default (branch) - t3@ Adding drill (current) - t2: Adding saw - t1: Adding hammer - t0^ adding fruits (base) - -They are seen as independent branches by Mercurial. No rebase or merge -between them will be attempted by default: - - $ hg rebase - nothing to rebase - [1] - -We simulate independant contributions to the repo with this -activity: - - $ cd ../server - $ hg update - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ mv shopping foo - $ echo 'Coat' > shopping - $ cat foo >> shopping - $ hg commit -m 'add a coat' - $ echo 'Coat' > shopping - $ echo 'Shoes' >> shopping - $ cat foo >> shopping - $ rm foo - $ hg commit -m 'add a pair of shoes' - $ cd ../client - -Let's discover what other people did contribute: - - $ hg pull - pulling from $TESTTMP/server (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files (+1 heads) - (run 'hg heads' to see heads) - -There are new changes! We can simply use ``hg rebase`` to update our -changeset on top of the latest: - - $ hg log -G - o changeset: 12:fbff9bc37a43 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add a pair of shoes - | - o changeset: 11:f2d6cacc6115 - | parent: 5:2d50db8b5b4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add a coat - | - | o changeset: 10:70dfa201ed73 - | | topic: drinks - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding orange juice - | | - | o changeset: 9:8dfa45bd5e0c - |/ topic: drinks - | parent: 5:2d50db8b5b4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding apple juice - | - | @ changeset: 8:34255b455dac - | | topic: tools - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding drill - | | - | o changeset: 7:cffff85af537 - | | topic: tools - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding saw - | | - | o changeset: 6:183984ef46d1 - |/ topic: tools - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding hammer - | - o changeset: 5:2d50db8b5b4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 4:4011b46eeb33 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - o changeset: 3:6104862e8b84 - | parent: 0:38da43f0a2ea - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding clothes - | - o changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 3 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=3, - pin=true, - pos="1,3!", - shape=circle, - style=filled, - width=0.5]; - 0 -> 3 [arrowhead=none, - penwidth=2.0]; - 4 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=4, - pin=true, - pos="1,4!", - shape=circle, - style=filled, - width=0.5]; - 3 -> 4 [arrowhead=none, - penwidth=2.0]; - 5 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=5, - pin=true, - pos="1,5!", - shape=circle, - style=filled, - width=0.5]; - 4 -> 5 [arrowhead=none, - penwidth=2.0]; - 6 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=6, - pin=true, - pos="1,6!", - shape=pentagon, - style=filled, - width=0.5]; - 5 -> 6 [arrowhead=none, - penwidth=2.0]; - 9 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=9, - pin=true, - pos="1,9!", - shape=pentagon, - style=filled, - width=0.5]; - 5 -> 9 [arrowhead=none, - penwidth=2.0]; - 11 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=11, - pin=true, - pos="1,11!", - shape=circle, - style=filled, - width=0.5]; - 5 -> 11 [arrowhead=none, - penwidth=2.0]; - 7 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=7, - pin=true, - pos="1,7!", - shape=pentagon, - style=filled, - width=0.5]; - 6 -> 7 [arrowhead=none, - penwidth=2.0]; - 8 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=8, - pin=true, - pos="1,8!", - shape=pentagon, - style=filled, - width=0.5]; - 7 -> 8 [arrowhead=none, - penwidth=2.0]; - 10 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=10, - pin=true, - pos="1,10!", - shape=pentagon, - style=filled, - width=0.5]; - 9 -> 10 [arrowhead=none, - penwidth=2.0]; - 12 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=12, - pin=true, - pos="1,12!", - shape=circle, - style=filled, - width=0.5]; - 11 -> 12 [arrowhead=none, - penwidth=2.0]; - } -#endif - - $ hg rebase - rebasing 6:183984ef46d1 "Adding hammer" - merging shopping - switching to topic tools - rebasing 7:cffff85af537 "Adding saw" - merging shopping - rebasing 8:34255b455dac "Adding drill" - merging shopping - -But what about the other topic? You can use 'hg topics --verbose' to see -information about all the topics: - - $ hg topics --verbose - drinks (on branch: default, 2 changesets, 2 behind) - * tools (on branch: default, 3 changesets) - -The "2 behind" is telling you that there are 2 new changesets over the base of the topic. - -Pushing that topic would create a new head, and therefore will be prevented: - - $ hg push --rev drinks - pushing to $TESTTMP/server (glob) - searching for changes - abort: push creates new remote head 70dfa201ed73! - (merge or see 'hg help push' for details about pushing new heads) - [255] - - -Even after a rebase, pushing all active topics at the same time would publish -them to the default branch, and then mercurial would complain about the -multiple *public* heads it would create on that branch: - - $ hg rebase -b drinks - rebasing 9:8dfa45bd5e0c "Adding apple juice" - merging shopping - switching to topic drinks - rebasing 10:70dfa201ed73 "Adding orange juice" - merging shopping - switching to topic tools - - $ hg push - pushing to $TESTTMP/server (glob) - searching for changes - abort: push creates new remote head 4cd7c1591a67! - (merge or see 'hg help push' for details about pushing new heads) - [255] - -Publishing only one of them is allowed (as long as it does not create a new -branch head as we just saw in the previous case): - - $ hg push -r drinks - pushing to $TESTTMP/server (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 2 changesets with 2 changes to 1 files - 2 new obsolescence markers - -The published topic has now disappeared, and the other is now marked as -"behind": - - $ hg topics --verbose - * tools (on branch: default, 3 changesets, 2 behind) - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3@ Adding drill (current) - t2: Adding saw - t1: Adding hammer - t0^ add a pair of shoes (base) - -Working Within Your Stack -=========================== - -Navigating within your stack ----------------------------- - -As we saw before `stack` displays changesets on your current topic in a clean way: - - $ hg topics --verbose - * tools (on branch: default, 3 changesets, 2 behind) - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3@ Adding drill (current) - t2: Adding saw - t1: Adding hammer - t0^ add a pair of shoes (base) - -You can navigate in your current stack with `previous` and `next`. - -`previous` will bring you back to the parent of the topic head. - - $ hg previous - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - [14] Adding saw - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3: Adding drill - t2@ Adding saw (current) - t1: Adding hammer - t0^ add a pair of shoes (base) - -`next` will move you forward to the topic head. - - $ hg next - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - [15] Adding drill - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3@ Adding drill (current) - t2: Adding saw - t1: Adding hammer - t0^ add a pair of shoes (base) - -You can also directly jump to a changeset within your stack with the revset `t#`. - - $ hg update t1 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3: Adding drill - t2: Adding saw - t1@ Adding hammer (current) - t0^ add a pair of shoes (base) - -Editing your work mid-stack ---------------------------- - -It's easy to edit your work inside your stack: - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3: Adding drill - t2: Adding saw - t1@ Adding hammer (current) - t0^ add a pair of shoes (base) - - $ hg amend -m "Adding hammer to the shopping list" - 2 new unstable changesets - -Understanding the current situation with hg log is not so easy, because -it shows too many things: - - $ hg log -G -r "t0::" - @ changeset: 18:b7509bd417f8 - | tag: tip - | topic: tools - | parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding hammer to the shopping list - | - | o changeset: 17:4cd7c1591a67 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding orange juice - | | - | o changeset: 16:20759cb47ff8 - |/ parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding apple juice - | - | o changeset: 15:bb1e6254f532 - | | topic: tools - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding drill - | | - | o changeset: 14:d4f97f32f8a1 - | | topic: tools - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding saw - | | - | x changeset: 13:a8ab3599d53d - |/ topic: tools - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding hammer - | - o changeset: 12:fbff9bc37a43 - | user: test - ~ date: Thu Jan 01 00:00:00 1970 +0000 - summary: add a pair of shoes - - -#if docgraph-ext - $ hg docgraph -r "t0::" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 12 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=12, - pin=true, - pos="1,12!", - shape=circle, - style=filled, - width=0.5]; - 13 [fillcolor="#DFDFFF", - fixedsize=true, - group=default_alt, - height=0.5, - label=13, - pin=true, - pos="2,13!", - shape=pentagon, - style="dotted, filled", - width=0.5]; - 12 -> 13 [arrowhead=none, - penwidth=2.0]; - 18 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=18, - pin=true, - pos="1,18!", - shape=pentagon, - style=filled, - width=0.5]; - 12 -> 18 [arrowhead=none, - penwidth=2.0]; - 16 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=16, - pin=true, - pos="1,16!", - shape=circle, - style=filled, - width=0.5]; - 12 -> 16 [arrowhead=none, - penwidth=2.0]; - 13 -> 18 [arrowhead=none, - minlen=0, - penwidth=2.0, - style=dashed]; - 14 [fillcolor="#FF4F4F", - fixedsize=true, - group=default_alt, - height=0.5, - label=14, - pin=true, - pos="2,14!", - shape=pentagon, - style=filled, - width=0.5]; - 13 -> 14 [arrowhead=none, - penwidth=2.0]; - 15 [fillcolor="#FF4F4F", - fixedsize=true, - group=default_alt, - height=0.5, - label=15, - pin=true, - pos="2,15!", - shape=pentagon, - style=filled, - width=0.5]; - 14 -> 15 [arrowhead=none, - penwidth=2.0]; - 17 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=17, - pin=true, - pos="1,17!", - shape=circle, - style=filled, - width=0.5]; - 16 -> 17 [arrowhead=none, - penwidth=2.0]; - } -#endif - -Fortunately stack shows you a better visualization: - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3$ Adding drill (unstable) - t2$ Adding saw (unstable) - t1@ Adding hammer to the shopping list (current) - t0^ add a pair of shoes (base) - -It's easy to stabilize the situation, `next` has an `--evolve` option. It will -do the necessary relocation of `t2` and `t3` over the new `t1` without having -to do that rebase by hand.: - - $ hg next --evolve - move:[14] Adding saw - atop:[18] Adding hammer to the shopping list - working directory now at d5c51ee5762a - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3$ Adding drill (unstable) - t2@ Adding saw (current) - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) - -One more to go: - - $ hg next --evolve - move:[15] Adding drill - atop:[19] Adding saw - working directory now at bae3758e46bf - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t3@ Adding drill (current) - t2: Adding saw - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) - -Let's take a look at `hg log` once again: - - $ hg log -G -r "t0::" - @ changeset: 20:bae3758e46bf - | tag: tip - | topic: tools - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding drill - | - o changeset: 19:d5c51ee5762a - | topic: tools - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding saw - | - o changeset: 18:b7509bd417f8 - | topic: tools - | parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding hammer to the shopping list - | - | o changeset: 17:4cd7c1591a67 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding orange juice - | | - | o changeset: 16:20759cb47ff8 - |/ parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding apple juice - | - o changeset: 12:fbff9bc37a43 - | user: test - ~ date: Thu Jan 01 00:00:00 1970 +0000 - summary: add a pair of shoes - - -#if docgraph-ext - $ hg docgraph -r "t0::" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 12 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=12, - pin=true, - pos="1,12!", - shape=circle, - style=filled, - width=0.5]; - 16 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=16, - pin=true, - pos="1,16!", - shape=circle, - style=filled, - width=0.5]; - 12 -> 16 [arrowhead=none, - penwidth=2.0]; - 18 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=18, - pin=true, - pos="1,18!", - shape=pentagon, - style=filled, - width=0.5]; - 12 -> 18 [arrowhead=none, - penwidth=2.0]; - 17 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=17, - pin=true, - pos="1,17!", - shape=circle, - style=filled, - width=0.5]; - 16 -> 17 [arrowhead=none, - penwidth=2.0]; - 19 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=19, - pin=true, - pos="1,19!", - shape=pentagon, - style=filled, - width=0.5]; - 18 -> 19 [arrowhead=none, - penwidth=2.0]; - 20 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=20, - pin=true, - pos="1,20!", - shape=pentagon, - style=filled, - width=0.5]; - 19 -> 20 [arrowhead=none, - penwidth=2.0]; - } -#endif -Multi-headed stack ------------------- - -Stack is also very helpful when you have a multi-headed stack: - - $ hg up t1 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ echo "nails" > new_shopping - $ cat shopping >> new_shopping - $ mv new_shopping shopping - - $ hg commit -m 'Adding nails' - - $ hg stack - ### topic: tools (2 heads) - ### target: default (branch), 2 behind - t4: Adding drill - t3: Adding saw - t1^ Adding hammer to the shopping list (base) - t2@ Adding nails (current) - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) - -Solving this situation is easy with a topic: use merge or rebase. -Merge within a multi-headed stack will use the other topic head as -destination if the topic has two heads. But rebasing will yield a -completely linear history so it's what we will do. - - $ hg log -G - @ changeset: 21:f936c6da9d61 - | tag: tip - | topic: tools - | parent: 18:b7509bd417f8 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding nails - | - | o changeset: 20:bae3758e46bf - | | topic: tools - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding drill - | | - | o changeset: 19:d5c51ee5762a - |/ topic: tools - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding saw - | - o changeset: 18:b7509bd417f8 - | topic: tools - | parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding hammer to the shopping list - | - | o changeset: 17:4cd7c1591a67 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Adding orange juice - | | - | o changeset: 16:20759cb47ff8 - |/ parent: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding apple juice - | - o changeset: 12:fbff9bc37a43 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add a pair of shoes - | - o changeset: 11:f2d6cacc6115 - | parent: 5:2d50db8b5b4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: add a coat - | - o changeset: 5:2d50db8b5b4c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding fruits - | - o changeset: 4:4011b46eeb33 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: adding condiments - | - o changeset: 3:6104862e8b84 - | parent: 0:38da43f0a2ea - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Adding clothes - | - o changeset: 0:38da43f0a2ea - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Shopping list - - -#if docgraph-ext - $ hg docgraph -r "all()" --sphinx-directive --rankdir LR #rest-ignore - .. graphviz:: - - strict digraph { - graph [rankdir=LR, - splines=polyline - ]; - node [label="\N"]; - 0 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=0, - pin=true, - pos="1,0!", - shape=circle, - style=filled, - width=0.5]; - 3 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=3, - pin=true, - pos="1,3!", - shape=circle, - style=filled, - width=0.5]; - 0 -> 3 [arrowhead=none, - penwidth=2.0]; - 4 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=4, - pin=true, - pos="1,4!", - shape=circle, - style=filled, - width=0.5]; - 3 -> 4 [arrowhead=none, - penwidth=2.0]; - 5 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=5, - pin=true, - pos="1,5!", - shape=circle, - style=filled, - width=0.5]; - 4 -> 5 [arrowhead=none, - penwidth=2.0]; - 11 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=11, - pin=true, - pos="1,11!", - shape=circle, - style=filled, - width=0.5]; - 5 -> 11 [arrowhead=none, - penwidth=2.0]; - 12 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=12, - pin=true, - pos="1,12!", - shape=circle, - style=filled, - width=0.5]; - 11 -> 12 [arrowhead=none, - penwidth=2.0]; - 16 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=16, - pin=true, - pos="1,16!", - shape=circle, - style=filled, - width=0.5]; - 12 -> 16 [arrowhead=none, - penwidth=2.0]; - 18 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=18, - pin=true, - pos="1,18!", - shape=pentagon, - style=filled, - width=0.5]; - 12 -> 18 [arrowhead=none, - penwidth=2.0]; - 17 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=17, - pin=true, - pos="1,17!", - shape=circle, - style=filled, - width=0.5]; - 16 -> 17 [arrowhead=none, - penwidth=2.0]; - 19 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=19, - pin=true, - pos="1,19!", - shape=pentagon, - style=filled, - width=0.5]; - 18 -> 19 [arrowhead=none, - penwidth=2.0]; - 21 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=21, - pin=true, - pos="1,21!", - shape=pentagon, - style=filled, - width=0.5]; - 18 -> 21 [arrowhead=none, - penwidth=2.0]; - 20 [fillcolor="#9999FF", - fixedsize=true, - group=default, - height=0.5, - label=20, - pin=true, - pos="1,20!", - shape=pentagon, - style=filled, - width=0.5]; - 19 -> 20 [arrowhead=none, - penwidth=2.0]; - } -#endif - - $ hg up t4 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg rebase - rebasing 19:d5c51ee5762a "Adding saw" - merging shopping - rebasing 20:bae3758e46bf "Adding drill" - merging shopping - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t4@ Adding drill (current) - t3: Adding saw - t2: Adding nails - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) - -Collaborating through a non-publishing server -============================================= - -.. setup: - -.. Let's create a non-publishing server: - - $ cd .. - - $ hg clone server non-publishing-server - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ cd non-publishing-server - $ cat >> .hg/hgrc << EOF - > [phases] - > publish = false - > EOF - -.. And another client: - - $ cd .. - - $ hg clone server other-client - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ cd client - -We can now share these draft changesets: -(4.1-tests needs the --force to proceed with the test) - - $ hg push ../non-publishing-server -r tools --force - pushing to ../non-publishing-server - searching for changes - adding changesets - adding manifests - adding file changes - added 4 changesets with 4 changes to 1 files (+1 heads) - 8 new obsolescence markers - -Pushing the new topic branch to a non publishing server did not require ---force. As long as new heads are on their own topic, Mercurial will not -complain about them. - -From another client, we will get them with their topic: - - $ cd ../other-client - - $ hg pull ../non-publishing-server - pulling from ../non-publishing-server - searching for changes - adding changesets - adding manifests - adding file changes - added 4 changesets with 4 changes to 1 files (+1 heads) - 8 new obsolescence markers - (run 'hg heads' to see heads) - - $ hg topics --verbose - tools (on branch: default, 4 changesets, 2 behind) - - $ hg up tools - switching to topic tools - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t4@ Adding drill (current) - t3: Adding saw - t2: Adding nails - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) - -We can also add new changesets and share them: -(4.1-tests needs the --force to proceed with the test) - - $ echo screws >> shopping - - $ hg commit -A -m "Adding screws" - - $ hg push ../non-publishing-server --force - pushing to ../non-publishing-server - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - -And retrieve them on the first client: - - $ cd ../client - - $ hg pull ../non-publishing-server - pulling from ../non-publishing-server - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - (run 'hg update' to get a working copy) - - $ hg update - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg stack - ### topic: tools - ### target: default (branch), 2 behind - t5@ Adding screws (current) - t4: Adding drill - t3: Adding saw - t2: Adding nails - t1: Adding hammer to the shopping list - t0^ add a pair of shoes (base) diff -r 9fa39195a4c9 -r c71e371c797b tests/test-topic.t --- a/tests/test-topic.t Mon Oct 23 15:50:21 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,754 +0,0 @@ - $ . "$TESTDIR/testlib/topic_setup.sh" - - $ hg init pinky - $ cd pinky - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > # disable the new graph style until we drop 3.7 support - > graphstyle.missing = | - > EOF - - $ hg help topics - hg topics [TOPIC] - - View current topic, set current topic, change topic for a set of revisions, or - see all topics. - - Clear topic on existing topiced revisions: - - hg topics --rev --clear - - Change topic on some revisions: - - hg topics --rev - - Clear current topic: - - hg topics --clear - - Set current topic: - - hg topics - - List of topics: - - hg topics - - List of topics sorted according to their last touched time displaying last - touched time and the user who last touched the topic: - - hg topics --age - - The active topic (if any) will be prepended with a "*". - - The '--current' flag helps to take active topic into account. For example, - if you want to set the topic on all the draft changesets to the active - topic, you can do: 'hg topics -r "draft()" --current' - - The --verbose version of this command display various information on the - state of each topic. - - options ([+] can be repeated): - - --clear clear active topic if any - -r --rev REV [+] revset of existing revisions - -l --list show the stack of changeset in the topic - --age show when you last touched the topics - --current display the current topic only - - (some details hidden, use --verbose to show complete help) - $ hg topics - -Test topics interaction with evolution: - - $ hg topics --config experimental.evolution= - $ hg topics --config experimental.evolution= --rev . bob - abort: must have obsolete enabled to change topics - [255] - -Create some changes: - - $ for x in alpha beta gamma delta ; do - > echo file $x >> $x - > hg addremove - > hg ci -m "Add file $x" - > done - adding alpha - adding beta - adding gamma - adding delta - -Still no topics - $ hg topics - $ hg topics --current - no active topic - [1] - $ hg topics --current somerandomtopic - abort: cannot use --current when setting a topic - [255] - $ hg topics --current --clear - abort: cannot use --current and --clear - [255] - $ hg topics --clear somerandomtopic - abort: cannot use --clear when setting a topic - [255] - -Trying some invalid topicnames - - $ hg topic '.' - abort: the name '.' is reserved - [255] - $ hg topic null - abort: the name 'null' is reserved - [255] - $ hg topic tip - abort: the name 'tip' is reserved - [255] - $ hg topic 12345 - abort: cannot use an integer as a name - [255] - $ hg topic ' ' - abort: topic name cannot consist entirely of whitespaces - [255] - -Test commit flag and help text - - $ echo stuff >> alpha - $ HGEDITOR=cat hg ci -t topicflag - - - HG: Enter commit message. Lines beginning with 'HG:' are removed. - HG: Leave message empty to abort commit. - HG: -- - HG: user: test - HG: topic 'topicflag' - HG: branch 'default' - HG: changed alpha - abort: empty commit message - [255] - $ hg revert alpha - $ hg topic - * topicflag (0 changesets) - -Make a topic - - $ hg topic narf - $ hg topics - * narf (0 changesets) - $ hg topics -v - * narf (on branch: default, 0 changesets) - $ hg stack - ### topic: narf - ### target: default (branch) - (stack is empty) - t0^ Add file delta (base current) - -Add commits to topic - - $ echo topic work >> alpha - $ hg ci -m 'start on narf' - active topic 'narf' grew its first changeset - $ hg co .^ - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg topic fran - marked working directory as topic: fran - $ hg topics - * fran (0 changesets) - narf (1 changesets) - $ hg topics --current - fran - $ echo >> fran work >> beta - $ hg ci -m 'start on fran' - active topic 'fran' grew its first changeset - $ hg co narf - switching to topic narf - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg topic - fran (1 changesets) - * narf (1 changesets) - $ hg log -r . -T '{topics}\n' - narf - $ echo 'narf!!!' >> alpha - $ hg ci -m 'narf!' - $ hg log -G - @ changeset: 6:7c34953036d6 - | tag: tip - | topic: narf - | parent: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: narf! - | - | o changeset: 5:0469d521db49 - | | topic: fran - | | parent: 3:a53952faf762 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: start on fran - | | - o | changeset: 4:fb147b0b417c - |/ topic: narf - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - o changeset: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file delta - | - o changeset: 2:15d1eb11d2fa - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file gamma - | - o changeset: 1:c692ea2c9224 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file beta - | - o changeset: 0:c2b7d2f7d14b - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Add file alpha - - -Exchanging of topics: - $ cd .. - $ hg init brain - $ hg -R pinky push -r 4 brain - pushing to brain - searching for changes - adding changesets - adding manifests - adding file changes - added 5 changesets with 5 changes to 4 files - -Export - - $ hg -R pinky export - # HG changeset patch - # User test - # Date 0 0 - # Thu Jan 01 00:00:00 1970 +0000 - # Node ID 7c34953036d6a36eae468c550d0592b89ee8bffc - # Parent fb147b0b417c25ca15547cd945acf51cf8dcaf02 - # EXP-Topic narf - narf! - - diff -r fb147b0b417c -r 7c34953036d6 alpha - --- a/alpha Thu Jan 01 00:00:00 1970 +0000 - +++ b/alpha Thu Jan 01 00:00:00 1970 +0000 - @@ -1,2 +1,3 @@ - file alpha - topic work - +narf!!! - -Import - - $ hg -R pinky export > narf.diff - $ hg -R pinky --config extensions.strip= strip . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - saved backup bundle to $TESTTMP/pinky/.hg/strip-backup/7c34953036d6-1ff3bae2-backup.hg (glob) - $ hg -R pinky import narf.diff - applying narf.diff - $ hg -R pinky log -r . - changeset: 6:7c34953036d6 - tag: tip - topic: narf - parent: 4:fb147b0b417c - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: narf! - -Now that we've pushed to brain, the work done on narf is no longer a -draft, so we won't see that topic name anymore: - - $ hg log -R pinky -G - @ changeset: 6:7c34953036d6 - | tag: tip - | topic: narf - | parent: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: narf! - | - | o changeset: 5:0469d521db49 - | | topic: fran - | | parent: 3:a53952faf762 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: start on fran - | | - o | changeset: 4:fb147b0b417c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - o changeset: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file delta - | - o changeset: 2:15d1eb11d2fa - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file gamma - | - o changeset: 1:c692ea2c9224 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file beta - | - o changeset: 0:c2b7d2f7d14b - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Add file alpha - - $ cd brain - $ hg co tip - 4 files updated, 0 files merged, 0 files removed, 0 files unresolved - -Because the change is public, we won't inherit the topic from narf. - - $ hg topic - $ echo what >> alpha - $ hg topic query - marked working directory as topic: query - $ hg ci -m 'what is narf, pinky?' - active topic 'query' grew its first changeset - $ hg log -Gl2 - @ changeset: 5:c01515cfc331 - | tag: tip - | topic: query - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: what is narf, pinky? - | - o changeset: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - - $ hg push -f ../pinky -r query - pushing to ../pinky - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - - $ hg -R ../pinky log -Gl 4 - o changeset: 7:c01515cfc331 - | tag: tip - | topic: query - | parent: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: what is narf, pinky? - | - | @ changeset: 6:7c34953036d6 - |/ topic: narf - | parent: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: narf! - | - | o changeset: 5:0469d521db49 - | | topic: fran - | | parent: 3:a53952faf762 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: start on fran - | | - o | changeset: 4:fb147b0b417c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - - $ hg topics - * query (1 changesets) - $ cd ../pinky - $ hg co query - switching to topic query - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo answer >> alpha - $ hg ci -m 'Narf is like `zort` or `poit`!' - $ hg merge narf - merging alpha - warning: conflicts while merging alpha! (edit, then use 'hg resolve --mark') - 0 files updated, 0 files merged, 0 files removed, 1 files unresolved - use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon - [1] - $ hg revert -r narf alpha - $ hg resolve -m alpha - (no more unresolved files) - $ hg topic narf - $ hg ci -m 'Finish narf' - $ hg topics - fran (1 changesets) - * narf (2 changesets) - query (2 changesets) - $ hg debugnamecomplete # branch:topic here is a buggy side effect - default - default:fran - default:narf - default:query - fran - narf - query - tip - $ hg phase --public narf - active topic 'narf' is now empty - -POSSIBLE BUG: narf topic stays alive even though we just made all -narf commits public: - - $ hg topics - fran (1 changesets) - * narf (0 changesets) - $ hg log -Gl 6 - @ changeset: 9:ae074045b7a7 - |\ tag: tip - | | parent: 8:54c943c1c167 - | | parent: 6:7c34953036d6 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Finish narf - | | - | o changeset: 8:54c943c1c167 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Narf is like `zort` or `poit`! - | | - | o changeset: 7:c01515cfc331 - | | parent: 4:fb147b0b417c - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: what is narf, pinky? - | | - o | changeset: 6:7c34953036d6 - |/ parent: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: narf! - | - | o changeset: 5:0469d521db49 - | | topic: fran - | | parent: 3:a53952faf762 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: start on fran - | | - o | changeset: 4:fb147b0b417c - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - - $ cd ../brain - $ hg topics - * query (1 changesets) - $ hg pull ../pinky -r narf - pulling from ../pinky - abort: unknown revision 'narf'! - [255] - $ hg pull ../pinky -r default - pulling from ../pinky - searching for changes - adding changesets - adding manifests - adding file changes - added 3 changesets with 3 changes to 1 files - active topic 'query' is now empty - (run 'hg update' to get a working copy) - $ hg topics - * query (0 changesets) - -We can pull in the draft-phase change and we get the new topic - - $ hg pull ../pinky - pulling from ../pinky - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files (+1 heads) - (run 'hg heads' to see heads) - $ hg topics - fran (1 changesets) - * query (0 changesets) - $ hg log -Gr 'draft()' - o changeset: 9:0469d521db49 - | tag: tip - | topic: fran - | parent: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on fran - | - -query is not an open topic, so when we clear the current topic it'll -disappear: - - $ hg topics --clear - clearing empty topic "query" - $ hg topics - fran (1 changesets) - -Topic revset - $ hg log -r 'topic()' -G - o changeset: 9:0469d521db49 - | tag: tip - | topic: fran - | parent: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on fran - | - $ hg log -r 'not topic()' -G - o changeset: 8:ae074045b7a7 - |\ parent: 7:54c943c1c167 - | | parent: 6:7c34953036d6 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Finish narf - | | - | o changeset: 7:54c943c1c167 - | | parent: 5:c01515cfc331 - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: Narf is like `zort` or `poit`! - | | - o | changeset: 6:7c34953036d6 - | | parent: 4:fb147b0b417c - | | user: test - | | date: Thu Jan 01 00:00:00 1970 +0000 - | | summary: narf! - | | - | @ changeset: 5:c01515cfc331 - |/ user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: what is narf, pinky? - | - o changeset: 4:fb147b0b417c - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on narf - | - o changeset: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file delta - | - o changeset: 2:15d1eb11d2fa - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file gamma - | - o changeset: 1:c692ea2c9224 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: Add file beta - | - o changeset: 0:c2b7d2f7d14b - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: Add file alpha - -No matches because narf is already closed: - $ hg log -r 'topic(narf)' -G -This regexp should match the topic `fran`: - $ hg log -r 'topic("re:.ra.")' -G - o changeset: 9:0469d521db49 - | tag: tip - | topic: fran - | parent: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on fran - | -Exact match on fran: - $ hg log -r 'topic(fran)' -G - o changeset: 9:0469d521db49 - | tag: tip - | topic: fran - | parent: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on fran - | - -Match current topic: - $ hg topic - fran (1 changesets) - $ hg log -r 'topic(.)' -(no output is expected) - $ hg co fran - switching to topic fran - 2 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg log -r 'topic(.)' - changeset: 9:0469d521db49 - tag: tip - topic: fran - parent: 3:a53952faf762 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: start on fran - - -Deactivate the topic. - $ hg topics - * fran (1 changesets) - $ hg topics --clear - $ echo fran? >> beta - $ hg ci -m 'fran?' - created new head - $ hg log -Gr 'draft()' - @ changeset: 10:4073470c35e1 - | tag: tip - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: fran? - | - o changeset: 9:0469d521db49 - | topic: fran - | parent: 3:a53952faf762 - | user: test - | date: Thu Jan 01 00:00:00 1970 +0000 - | summary: start on fran - | - - $ hg topics - fran (1 changesets) - -Testing for updating to t0 -========================== - - $ hg up fran - switching to topic fran - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg stack - ### topic: fran - ### target: default (branch), ambigious rebase destination - branch 'default' has 2 heads - t1@ start on fran (current) - t0^ Add file delta (base) - - $ hg up t0 - preserving the current topic 'fran' - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ hg topic - * fran (1 changesets) - $ hg stack - ### topic: fran - ### target: default (branch), ambigious rebase destination - branch 'default' has 2 heads - t1: start on fran - t0^ Add file delta (base current) - - $ hg topics --age - * fran (* by test) (glob) - - $ cd .. - -Testing the new config knob to forbid untopiced commit -====================================================== - - $ hg init ponky - $ cd ponky - $ cat <> .hg/hgrc - > [phases] - > publish=false - > EOF - $ cat <> $HGRCPATH - > [experimental] - > topic-mode = enforce - > EOF - $ touch a b c d - $ hg add a - $ hg ci -m "Added a" - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - -(same test, checking we abort before the editor) - - $ EDITOR=cat hg ci -m "Added a" --edit - abort: no active topic - (see 'hg help -e topic.topic-mode' for details) - [255] - $ hg ci -m "added a" --config experimental.topic-mode=off - $ hg log - changeset: 0:a154386e50d1 - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added a - - -Testing the --age flag for `hg topics` -====================================== - - $ hg topic topic1970 --rev 0 - switching to topic topic1970 - changed topic on 1 changes - - $ hg add b - $ hg topic topic1990 - $ hg ci -m "Added b" --config devel.default-date="631152000 0" --user "foo" --date "631152000 0" - active topic 'topic1990' grew its first changeset - $ hg add c - $ hg topic topic2010 - $ hg ci -m "Added c" --config devel.default-date="1262304000 0" --user "bar" --date "1262304000 0" - active topic 'topic2010' grew its first changeset - - $ hg log -G - @ changeset: 3:76b16af75125 - | tag: tip - | topic: topic2010 - | user: bar - | date: Fri Jan 01 00:00:00 2010 +0000 - | summary: Added c - | - o changeset: 2:bba5bde53608 - | topic: topic1990 - | user: foo - | date: Mon Jan 01 00:00:00 1990 +0000 - | summary: Added b - | - o changeset: 1:e5a30a141954 - topic: topic1970 - parent: -1:000000000000 - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: added a - - $ hg topics - topic1970 (1 changesets) - topic1990 (1 changesets) - * topic2010 (1 changesets) - - $ hg topics --age - topic1970 (* by test) (glob) - * topic2010 (* by bar) (glob) - topic1990 (* by foo) (glob) - - $ hg up topic1970 - switching to topic topic1970 - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - - $ hg topics --age - * topic1970 (* by test) (glob) - topic2010 (* by bar) (glob) - topic1990 (* by foo) (glob) - - $ hg topics --age random - abort: cannot use --age while setting a topic - [255] - $ cd ..