bundle: quick fix to ludicrous performance penalty
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 17 May 2022 13:53:14 +0100
changeset 49250 ed9170ff791a
parent 49249 b909dd35d9ab
child 49251 5d28246b9acc
bundle: quick fix to ludicrous performance penalty We tried a `hg bundle --base ':(tip^)' --rev 'all()'` on a large repository and it spent 3 minutes on this 2 list comprehensions. This change remove this cost. There are still a lot of low hanging fruits as the command still take 30 seconds. However this is a trivial patch with a massive speedup so I'll just sent it.
mercurial/commands.py
--- a/mercurial/commands.py	Fri May 20 14:27:46 2022 +0200
+++ b/mercurial/commands.py	Tue May 17 13:53:14 2022 +0100
@@ -1600,8 +1600,9 @@
             raise error.InputError(
                 _(b"--base is incompatible with specifying destinations")
             )
-        common = [repo[rev].node() for rev in base]
-        heads = [repo[r].node() for r in revs] if revs else None
+        cl = repo.changelog
+        common = [cl.node(rev) for rev in base]
+        heads = [cl.node(r) for r in revs] if revs else None
         outgoing = discovery.outgoing(repo, common, heads)
         missing = outgoing.missing
         excluded = outgoing.excluded