# HG changeset patch # User Durham Goode # Date 1442793222 25200 # Node ID d157e1f18e3f529006217e1584edeec1d9288485 # Parent ade5c488d622c6113de501d06fff26ea528059d9 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. diff -r ade5c488d622 -r d157e1f18e3f mercurial/revset.py --- 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