prev: fix the breakage of `hg previous` from obsolete cset
This patch fix the breakage of `hg prev` from obsolete changeset when topic is
involved. We get the topicidx of it's succesor and proceed.
--- a/hgext3rd/topic/__init__.py Fri Mar 16 14:59:10 2018 +0530
+++ b/hgext3rd/topic/__init__.py Fri Mar 16 15:01:44 2018 +0530
@@ -134,13 +134,14 @@
from . import (
compat,
constants,
+ destination,
+ discovery,
+ evolvebits,
flow,
+ randomname,
revset as topicrevset,
- destination,
stack,
topicmap,
- discovery,
- randomname
)
if util.safehasattr(registrar, 'command'):
@@ -240,6 +241,10 @@
revlist = stack.stack(self._repo, topic=topic)
try:
return revlist.index(self.rev())
+ except ValueError:
+ if self.obsolete():
+ succ = evolvebits._singlesuccessor(self._repo, self)
+ return revlist.index(succ)
except IndexError:
# Lets move to the last ctx of the current topic
return None
--- a/tests/test-evolve-topic.t Fri Mar 16 14:59:10 2018 +0530
+++ b/tests/test-evolve-topic.t Fri Mar 16 15:01:44 2018 +0530
@@ -324,47 +324,5 @@
~
$ 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]
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ [14] add ggg