hgsubversion + evolve + Mercurial 3.0 = crash

Sean Farley sean.michael.farley at gmail.com
Tue Apr 22 18:13:11 CDT 2014


Pierre-Yves David <pierre-yves.david at ens-lyon.org> writes:

> On 04/22/2014 11:45 AM, Greg Ward wrote:
>> 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?
>
> Evolve is adding some parent meta data to all created markers, It 
> assumed the list of marker was a list. hgsubversion give a generator. We 
> should probably makes evolve smarter there.

I've seen this error before but had trouble reproducing it.


More information about the Mercurial-devel mailing list