changeset 26306:d157e1f18e3f

revset: speed up existence checks for ordered filtered sets Previously, calling 'if foo:' on a ordered filtered set would start iterating in whatever the current direction was and return if a value was available. If the current direction was ascending, but the set had a fastdesc available, this meant we did a lot more work than necessary. If this was applied without my previous max/min fixes, it would improve max() performance (this was my first attempt at fixing the issue). Since those previous fixes went in though, this doesn't have a visible benefit in the benchmarks, but it does seem clearly better than it was before so I think it should still go in.
author Durham Goode <durham@fb.com>
date Sun, 20 Sep 2015 16:53:42 -0700
parents ade5c488d622
children 428a8747f4ee
files mercurial/revset.py
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/revset.py	Sun Sep 20 19:27:53 2015 -0700
+++ b/mercurial/revset.py	Sun Sep 20 16:53:42 2015 -0700
@@ -3225,7 +3225,12 @@
         return lambda: self._iterfilter(it())
 
     def __nonzero__(self):
-        for r in self:
+        it = self
+        fast = self.fastasc or self.fastdesc
+        if fast:
+            it = fast()
+
+        for r in it:
             return True
         return False