Mercurial > hg
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