evolve: fix createmarkers() wrapper to accept an iterable stable
authorGreg Ward <greg@gerg.ca>
Thu, 05 Jun 2014 18:07:39 -0400
branchstable
changeset 973 6d691fefdbd1
parent 971 fc7ca26f7491
child 988 85d213215d2c
child 991 a5ed07689dd3
child 1400 ff43167ed0ba
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.
hgext/evolve.py
--- a/hgext/evolve.py	Tue Jun 03 16:44:24 2014 -0700
+++ b/hgext/evolve.py	Thu Jun 05 18:07:39 2014 -0400
@@ -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]