[PATCH evolve] evolve: fix createmarkers() wrapper to accept an iterable

Pierre-Yves David pierre-yves.david at ens-lyon.org
Thu Jun 5 18:20:38 CDT 2014


Pushed, thanks!

(please next time use "evolve-ext" instead of "evolve" as a flag)

On 06/05/2014 03:09 PM, Greg Ward wrote:
> # HG changeset patch
> # User Greg Ward <greg at gerg.ca>
> # Date 1402006059 14400
> #      Thu Jun 05 18:07:39 2014 -0400
> # Branch stable
> # Node ID 12a3fc661230a3d4afb9515ac15222c60b661bc6
> # Parent  fc7ca26f74915c371f9cf2f1cfca85206edb7f55
> evolve: fix createmarkers() wrapper to accept an iterable
>
> Docstring in mercurial.obsolete says "<relations> must be an iterable
> of ...", and hgsubversion takes it at its word and passes a generator.
> Until around Mercurial 3.0, this did not cause any problems, but now
> it does: in a repo with both evolve and hgsubversion enabled, pushing
> to Subversion when obsolete changesets are present causes a crash:
>
>    [...]
>    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
>
> Since hgsubersion is playing by the documented rules, evolve must be
> the guilty party here.
>
> diff --git a/hgext/evolve.py b/hgext/evolve.py
> --- a/hgext/evolve.py
> +++ b/hgext/evolve.py
> @@ -331,6 +331,7 @@
>       # every time this test is run, a kitten is slain.
>       # Change it as soon as possible
>       if '[,{metadata}]' in orig.__doc__:
> +        relations = list(relations)
>           for idx, rel in enumerate(relations):
>               prec = rel[0]
>               sucs = rel[1]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list