Mercurial > public > mercurial-scm > hg
diff mercurial/commands.py @ 21200:a1381eea7c7d stable
graft: do not use `.remove` on a smart set (regression)
Revset calls use to return a list. Graft use to mutate that list. We cannot do
this anymore leading to a crash when grafting multiple changeset with a revset.
File ".../mercurial/commands.py", line 3117, in graft
revs.remove(rev)
AttributeError: '_addset' object has no attribute 'remove'
We are late in code-freeze so we make the shortest possible fix by turning it
back to a list.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Mon, 28 Apr 2014 17:25:36 -0700 |
parents | 7991df9d2f20 |
children | 0054a77f49df 17da326fd041 |
line wrap: on
line diff
--- a/mercurial/commands.py Mon Apr 28 15:09:23 2014 -0700 +++ b/mercurial/commands.py Mon Apr 28 17:25:36 2014 -0700 @@ -3110,10 +3110,14 @@ # check for ancestors of dest branch crev = repo['.'].rev() ancestors = repo.changelog.ancestors([crev], inclusive=True) + # Cannot use x.remove(y) on smart set, this has to be a list. + # XXX make this lazy in the future + revs = list(revs) # don't mutate while iterating, create a copy for rev in list(revs): if rev in ancestors: ui.warn(_('skipping ancestor revision %s\n') % rev) + # XXX remove on list is slow revs.remove(rev) if not revs: return -1