hgsubversion + evolve + Mercurial 3.0 = crash

Pierre-Yves David pierre-yves.david at ens-lyon.org
Tue Apr 22 14:50:20 CDT 2014



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.

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list