graft: don't remove from a list in a loop
This addresses a TODO added in a1381eea7c7d (graft: do not use
`.remove` on a smart set (regression), 2014-04-28). I couldn't measure
any speedup.
Differential Revision: https://phab.mercurial-scm.org/D7805
--- a/mercurial/commands.py Fri Dec 27 22:40:52 2019 -0800
+++ b/mercurial/commands.py Fri Dec 27 21:11:33 2019 -0800
@@ -3082,14 +3082,13 @@
crev = repo[b'.'].rev()
ancestors = repo.changelog.ancestors([crev], inclusive=True)
# XXX make this lazy in the future
- # don't mutate while iterating, create a copy
- for rev in list(revs):
+ for rev in revs:
if rev in ancestors:
ui.warn(
_(b'skipping ancestor revision %d:%s\n') % (rev, repo[rev])
)
- # XXX remove on list is slow
- revs.remove(rev)
+ revs = [r for r in revs if r not in ancestors]
+
if not revs:
return -1