[PATCH 3 of 5] revset: avoid in loop lookup in _generatorset._consumegen

Pierre-Yves David pierre-yves.david at ens-lyon.org
Fri Sep 19 17:33:56 CDT 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1398902208 25200
#      Wed Apr 30 16:56:48 2014 -0700
# Node ID a2b305e889547516d7952ee8ecd67948cd8ff360
# Parent  a38a9240a0c57afe2f4939f41a63382ef76b92fc
revset: avoid in loop lookup in _generatorset._consumegen

Python lookup are slow, let do all lookup outside of the for loop.

This provide a small but still significant speedup:

revset #0: 0::
0) wall 0.063258 comb 0.060000 user 0.060000 sys 0.000000 (best of 100)
1) wall 0.057776 comb 0.050000 user 0.050000 sys 0.000000 (best of 100)

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2664,13 +2664,15 @@ class _generatorset(object):
             else:
                 yield consume.next()
             i += 1
 
     def _consumegen(self):
+        cache = self._cache
+        genlist = self._genlist.append
         for item in self._gen:
-            self._cache[item] = True
-            self._genlist.append(item)
+            cache[item] = True
+            genlist(item)
             yield item
         self._finished = True
 
     def set(self):
         return self


More information about the Mercurial-devel mailing list