hgsubversion + evolve + Mercurial 3.0 = crash

Greg Ward greg at gerg.ca
Tue Apr 22 13:45:13 CDT 2014


Hi all --

At work, I've been using hgsubversion and evolve on top of Mercurial
2.9 quite happily for a couple of months now. In fact, it's gotten
almost boring. So I updated my work machine to 3.0-rc+whatever this
morning, and then updated to the tip of default for both evolve and
hgsubversion. "hg push" to subversion crashed:

$ hg push
pushing to svn+ssh://blah/blah/blah
searching for changes
committing cd09979921ea
[r49188] gward: Add some docstrings.
pulled 1 revisions
committing 990250bcbe5d
[r49189] gward: lineparser: skip blank lines
pulled 1 revisions
committing 0e6f8d5d7e9a
[r49190] gward: Remove dead code.
pulled 1 revisions
committing b59bd4842345
[r49191] gward: Placate pep8 (version 1.5.6 is stricter about block comments)
pulled 1 revisions
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
** Unknown exception encountered with possibly-broken third-party extension hgsubversion
** which supports versions unknown of Mercurial.
** Please disable hgsubversion and try your action again.
** If that fixes the bug please report it to the extension author.
** Python 2.7.5+ (default, Feb 27 2014, 19:37:08) [GCC 4.8.1]
** Mercurial Distributed SCM (version 3.0-rc+15-dae36d3e1c60+20140422)
** Extensions loaded: patchbomb, record, purge, extdiff, color, hgsubversion, rebase, histedit, evolve
Traceback (most recent call last):
  File "/home/gward/bin/hg", line 38, in <module>
    mercurial.dispatch.run()
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 28, in run
    sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255)
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 69, in dispatch
    ret = _runcatch(req)
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 138, in _runcatch
    return _dispatch(req)
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 810, in _dispatch
    cmdpats, cmdoptions)
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 590, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/home/gward/src/hg-stable/mercurial/extensions.py", line 196, in wrap
    return wrapper(origfn, *args, **kwargs)
  File "/home/gward/src/hg-stable/hgext/color.py", line 428, in colorcmd
    return orig(ui_, opts, cmd, cmdfunc)
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 901, in _runcommand
    return checkargs()
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 872, in checkargs
    return cmdfunc()
  File "/home/gward/src/hg-stable/mercurial/dispatch.py", line 807, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/home/gward/src/hg-stable/mercurial/util.py", line 518, in check
    return func(*args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/extensions.py", line 151, in wrap
    util.checksignature(origfn), *args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/util.py", line 518, in check
    return func(*args, **kwargs)
  File "/home/gward/src/hgsubversion/hgsubversion/wrappers.py", line 642, in generic
    return orig(ui, repo, *args, **opts)
  File "/home/gward/src/hg-stable/mercurial/util.py", line 518, in check
    return func(*args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/extensions.py", line 151, in wrap
    util.checksignature(origfn), *args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/util.py", line 518, in check
    return func(*args, **kwargs)
  File "/home/gward/src/hg-evolve/hgext/evolve.py", line 616, in warnobserrors
    ret = orig(ui, repo, *args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/util.py", line 518, in check
    return func(*args, **kwargs)
  File "/home/gward/src/hg-stable/mercurial/commands.py", line 4712, in push
    newbranch=opts.get('new_branch'))
  File "/home/gward/src/hg-evolve/hgext/evolve.py", line 642, in push
    result = super(evolvingrepo, self).push(remote, *args, **opts)
  File "/home/gward/src/hgsubversion/hgsubversion/svnrepo.py", line 77, in wrapper
    return fn(self, *args, **opts)
  File "/home/gward/src/hgsubversion/hgsubversion/svnrepo.py", line 101, in push
    return wrappers.push(self, remote, force, revs)
  File "/home/gward/src/hgsubversion/hgsubversion/wrappers.py", line 346, in push
    obsolete.createmarkers(repo, relations)
  File "/home/gward/src/hg-stable/mercurial/extensions.py", line 196, in wrap
    return wrapper(origfn, *args, **kwargs)
  File "/home/gward/src/hg-evolve/hgext/evolve.py", line 332, in _createmarkers
    relations[idx] = (prec, sucs, meta)
TypeError: 'generator' object does not support item assignment

The good news is, all four of my outgoing changesets were successfully
committed to svn. Things went wrong marking the original hg-only
changesets obsolete. 

Here's what my DAG looks like right now after the crash:

@  134:1adf425588e6 (public)  gward  Placate pep8 (version 1.5.6 is stricter about block comments)
|
| o  133:b59bd4842345 (draft)  gward  Placate pep8 (version 1.5.6 is stricter about block comments)
|/
o  132:2f12ffbec5c8 (public)  gward  Remove dead code.
|
o  131:12fbe1617fd3 (public)  gward  lineparser: skip blank lines
|
| o  130:990250bcbe5d (draft)  gward  lineparser: skip blank lines
|/
o  129:6d49db3243a7 (public)  gward  Add some docstrings.
|

The public changesets are in svn; the draft ones are not. So you can
see that two of the four changesets I pushed were successfully marked
obsolete and became hidden. Curiously, the two that were successfully
marked obsolete had themselves been amended -- they have obsolete
predecessors. The two that were not marked obsolete have no
predecessors; I got them right the first time.

Not sure who to blame here. Is this hgsubversion or evolve?

        Greg


More information about the Mercurial-devel mailing list