Mercurial > evolve
view tests/test-evolve-topic.t @ 3531:b3d2e0576d4c stable
prev: add a test case which shows traceback when doing prev on obsolete cset
This patch adds a test which shows how `hg prev` is borken when called from a
obsolete changeset and there is an active topic. The next patch will fix that.
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 16 Mar 2018 14:59:10 +0530 |
parents | 2e703ed1c713 |
children | 68e99d2c6267 |
line wrap: on
line source
Check we can find the topic extensions $ cat >> $HGRCPATH <<EOF > [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 orphan 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 @ 11 - {foo} e104f49bab28 add fff (draft) | | o 10 - {foo} d9cacd156ffc add ddd (draft) | | | | * 9 - {bar} 1d964213b023 add jjj (draft) | | | | | * 8 - {bar} fcab990f3261 add iii (draft) | | | | | * 7 - {bar} b0c2554835ac add hhh (draft) | | | | | * 6 - {bar} c748293f1c1a add ggg (draft) | | | +---x 5 - {foo} 6a6b7365c751 add fff (draft) | | * | 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:[10] add ddd move:[11] add fff atop:[12] add eee working directory is now at 070c5573d8f9 $ hg log -G @ 13 - {foo} 070c5573d8f9 add fff (draft) | o 12 - {foo} 42b49017ff90 add eee (draft) | o 10 - {foo} d9cacd156ffc add ddd (draft) | | * 9 - {bar} 1d964213b023 add jjj (draft) | | | * 8 - {bar} fcab990f3261 add iii (draft) | | | * 7 - {bar} b0c2554835ac add hhh (draft) | | | * 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:[13] add fff move:[7] add hhh atop:[14] add ggg move:[8] add iii atop:[15] add hhh move:[9] add jjj atop:[16] add iii working directory is now at 9bf430c106b7 $ hg log -G @ 17 - {bar} 9bf430c106b7 add jjj (draft) | o 16 - {bar} d2dc89c57700 add iii (draft) | o 15 - {bar} 20bc4d02aa62 add hhh (draft) | o 14 - {bar} 16d6f664b17c add ggg (draft) | o 13 - {foo} 070c5573d8f9 add fff (draft) | o 12 - {foo} 42b49017ff90 add eee (draft) | o 10 - {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 [12] add eee $ hg next 1 files updated, 0 files merged, 0 files removed, 0 files unresolved [13] 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 [14] add ggg $ hg prev preserving the current topic 'bar' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved [13] 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 [12] add eee Testing when instability is involved $ hg log -G o 17 - {bar} 9bf430c106b7 add jjj (draft) | o 16 - {bar} d2dc89c57700 add iii (draft) | o 15 - {bar} 20bc4d02aa62 add hhh (draft) | o 14 - {bar} 16d6f664b17c add ggg (draft) | o 13 - {foo} 070c5573d8f9 add fff (draft) | @ 12 - {foo} 42b49017ff90 add eee (draft) | o 10 - {foo} d9cacd156ffc add ddd (draft) | o 2 - {foo} cced9bac76e3 add ccc (draft) | o 1 - {} a4dbed0837ea add bbb (draft) | o 0 - {} 199cc73e9a0b add aaa (draft) $ hg topic -r 070c5573d8f9 bar 4 new orphan changesets changed topic on 1 changes $ hg up 16d6f664b17c switching to topic bar 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg stack ### topic: bar ### target: default (branch) t5$ add jjj (unstable) t4$ add iii (unstable) t3$ add hhh (unstable) t2$ add ggg (current unstable) t1: add fff t0^ add eee (base) $ hg prev 0 files updated, 0 files merged, 1 files removed, 0 files unresolved [18] add fff Testing issue 5708 when we are on obsolete changeset and there is active topic ------------------------------------------------------------------------------ $ hg log --graph @ 18 - {bar} 793eb6370b2d add fff (draft) | | * 17 - {bar} 9bf430c106b7 add jjj (draft) | | | * 16 - {bar} d2dc89c57700 add iii (draft) | | | * 15 - {bar} 20bc4d02aa62 add hhh (draft) | | | * 14 - {bar} 16d6f664b17c add ggg (draft) | | | x 13 - {foo} 070c5573d8f9 add fff (draft) |/ o 12 - {foo} 42b49017ff90 add eee (draft) | o 10 - {foo} d9cacd156ffc add ddd (draft) | o 2 - {foo} cced9bac76e3 add ccc (draft) | o 1 - {} a4dbed0837ea add bbb (draft) | o 0 - {} 199cc73e9a0b add aaa (draft) $ hg topic * bar (5 changesets, 4 troubled) foo (3 changesets) When the current topic, obsoleted changesets topic and successor topic are same $ hg up 20bc4d02aa62 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo foobar >> hhh $ hg amend $ hg up 20bc4d02aa62 1 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory parent is obsolete! (20bc4d02aa62) (use 'hg evolve' to update to its successor: d834582d9ee3) $ hg log -Gr 14:: * 19 - {bar} d834582d9ee3 add hhh (draft) | | * 17 - {bar} 9bf430c106b7 add jjj (draft) | | | * 16 - {bar} d2dc89c57700 add iii (draft) | | | @ 15 - {bar} 20bc4d02aa62 add hhh (draft) |/ * 14 - {bar} 16d6f664b17c add ggg (draft) | ~ $ hg prev ** Unknown exception encountered with possibly-broken third-party extension evolve ** which supports versions 4.4 of Mercurial. ** Please disable evolve and try your action again. ** If that fixes the bug please report it to https://bz.mercurial-scm.org/ ** Python 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609] ** Mercurial Distributed SCM (version 4.5.2+1098-cdc73e5c75af) ** Extensions loaded: rebase, evolve, topic Traceback (most recent call last): File "/tmp/hgtests.GW4RZg/install/bin/hg", line 41, in <module> dispatch.run() File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 88, in run status = (dispatch(req) or 0) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 208, in dispatch ret = _runcatch(req) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 349, in _runcatch return _callcatch(ui, _runcatchfunc) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 357, in _callcatch return scmutil.callcatch(ui, func) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/scmutil.py", line 154, in callcatch return func() File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 339, in _runcatchfunc return _dispatch(req) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 943, in _dispatch cmdpats, cmdoptions) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 700, in runcommand ret = _runcommand(ui, options, cmd, d) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 951, in _runcommand return cmdfunc() File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/dispatch.py", line 940, in <lambda> d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) File "/tmp/hgtests.GW4RZg/install/lib/python/mercurial/util.py", line 1497, in check return func(*args, **kwargs) File "/home/foobar/repo/mutable-history/hgext3rd/evolve/__init__.py", line 1052, in cmdprevious opts.get('move_bookmark'), topic) File "/home/foobar/repo/mutable-history/hgext3rd/evolve/__init__.py", line 995, in _findprevtarget if currenttopic and topic and _gettopicidx(p1) != 1: File "/home/foobar/repo/mutable-history/hgext3rd/evolve/__init__.py", line 957, in _gettopicidx return getattr(ctx, 'topicidx', lambda: None)() File "/home/foobar/repo/mutable-history/hgext3rd/topic/__init__.py", line 242, in _contexttopicidx return revlist.index(self.rev()) File "/home/foobar/repo/mutable-history/hgext3rd/topic/stack.py", line 95, in index return self.revs.index(item) ValueError: 15 is not in list [1]