previous: add test case when it's broken on obsolete cset
This patch adds couple of tests showing `hg previous` is broken on obsolete
changeset when the successor has different topic. Upcoming patch will fix this.
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
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[14] add ggg
When the current topic and successors topic are same, but obsolete cset has
different topic
$ hg rebase -s d2dc89c57700 -d d834582d9ee3 --config extensions.rebase=
rebasing 16:d2dc89c57700 "add iii" (bar)
1 new orphan changesets
rebasing 17:9bf430c106b7 "add jjj" (bar)
1 new orphan changesets
$ hg log -Gr 12::
* 21 - {bar} 7542e76aba2c add jjj (draft)
|
* 20 - {bar} 7858bd7e9906 add iii (draft)
|
* 19 - {bar} d834582d9ee3 add hhh (draft)
|
| o 18 - {bar} 793eb6370b2d add fff (draft)
| |
@ | 14 - {bar} 16d6f664b17c add ggg (draft)
| |
x | 13 - {foo} 070c5573d8f9 add fff (draft)
|/
o 12 - {foo} 42b49017ff90 add eee (draft)
|
~
$ hg up 070c5573d8f9
switching to topic foo
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory parent is obsolete! (070c5573d8f9)
(use 'hg evolve' to update to its successor: 793eb6370b2d)
$ hg topic bar
$ 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.PuAW80/install/bin/hg", line 41, in <module>
dispatch.run()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 88, in run
status = (dispatch(req) or 0)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 208, in dispatch
ret = _runcatch(req)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 349, in _runcatch
return _callcatch(ui, _runcatchfunc)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 357, in _callcatch
return scmutil.callcatch(ui, func)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/scmutil.py", line 154, in callcatch
return func()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 339, in _runcatchfunc
return _dispatch(req)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 943, in _dispatch
cmdpats, cmdoptions)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 700, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 951, in _runcommand
return cmdfunc()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 940, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
File "/tmp/hgtests.PuAW80/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 1051, 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 247, in _contexttopicidx
return revlist.index(succ)
File "/home/foobar/repo/mutable-history/hgext3rd/topic/stack.py", line 95, in index
return self.revs.index(item)
ValueError: 18 is not in list
[1]
When current topic and obsolete cset topic are same but successor has different
one
$ hg up 070c5573d8f9
switching to topic foo
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ 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.PuAW80/install/bin/hg", line 41, in <module>
dispatch.run()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 88, in run
status = (dispatch(req) or 0)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 208, in dispatch
ret = _runcatch(req)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 349, in _runcatch
return _callcatch(ui, _runcatchfunc)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 357, in _callcatch
return scmutil.callcatch(ui, func)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/scmutil.py", line 154, in callcatch
return func()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 339, in _runcatchfunc
return _dispatch(req)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 943, in _dispatch
cmdpats, cmdoptions)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 700, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 951, in _runcommand
return cmdfunc()
File "/tmp/hgtests.PuAW80/install/lib/python/mercurial/dispatch.py", line 940, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
File "/tmp/hgtests.PuAW80/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 1051, 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 247, in _contexttopicidx
return revlist.index(succ)
File "/home/foobar/repo/mutable-history/hgext3rd/topic/stack.py", line 95, in index
return self.revs.index(item)
ValueError: 18 is not in list
[1]