graft: don't remove from a list in a loop
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 27 Dec 2019 21:11:33 -0800
changeset 44045 df82c06e1a05
parent 44044 f3ad014b6a53
child 44046 4322de8f7016
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
mercurial/commands.py
--- 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