[issue2664] qpush fails with infinite recursion in _findtags when status file is wrong

timeless bugs at mercurial.selenic.com
Sun Feb 27 11:57:24 UTC 2011


New submission from timeless <timeless at gmail.com>:

steps:

hg init x;
cd x;
hg qnew y;
cp .hg/patches/status .hg/patches/evil;
hg qpop;
mv .hg/patches/evil .hg/patches/status;
hg qpush

results:

> /home/timeless/lib/python/mercurial/dispatch.py(57)_runcatch()
-> try:
(Pdb) Traceback (most recent call last):
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 58, in _runcatch
    return _dispatch(ui, args)
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 599, in _dispatch
    cmdpats, cmdoptions)
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 406, in
runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 653, in
_runcommand
    return checkargs()
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 607, in checkargs
    return cmdfunc()
  File "/home/timeless/lib/python/mercurial/dispatch.py", line 596, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/home/timeless/lib/python/mercurial/util.py", line 429, in check
    return func(*args, **kwargs)
  File "/home/timeless/lib/python/hgext/mq.py", line 2396, in push
    exact=opts.get('exact'))
  File "/home/timeless/lib/python/hgext/mq.py", line 1047, in push
    for b, ls in repo.branchmap().iteritems():
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 439, in
branchmap
    self.updatebranchcache()
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 433, in
updatebranchcache
    self._branchtags(partial, lrev)
  File "/home/timeless/lib/python/hgext/mq.py", line 2979, in _branchtags
    if qbasenode not in self:
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 209, in
__contains__
    return bool(self.lookup(changeid))
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 533, in lookup
    if key in self.tags():
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 332, in tags
    (self._tags, self._tagtypes) = self._findtags()
  File "/home/timeless/lib/python/hgext/mq.py", line 2954, in _findtags
    if mqtags[-1][0] not in self:
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 209, in
__contains__
    return bool(self.lookup(changeid))
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 533, in lookup
    if key in self.tags():
  File "/home/timeless/lib/python/mercurial/localrepo.py", line 332, in tags
    (self._tags, self._tagtypes) = self._findtags()
  File "/home/timeless/lib/python/hgext/mq.py", line 2954, in _findtags

...
RuntimeError: maximum recursion depth exceeded in <random-function>

Yes this is user error. no this isn't how i triggered it (i copied a
.hg/patches directory from another repo). we should handle this better anyway.

----------
messages: 15418
nosy: timeless
priority: bug
status: chatting
title: qpush fails with infinite recursion in _findtags when status file is wrong
topic: mq

____________________________________________________
Mercurial issue tracker <bugs at mercurial.selenic.com>
<http://mercurial.selenic.com/bts/issue2664>
____________________________________________________


More information about the Mercurial-devel mailing list