Mercurial > hg
changeset 17951:6f79c32c0bdf stable
commit: increase perf by avoiding unnecessary filteredrevs check
When commiting to a repo with lots of history (>400000 changesets)
the filteredrevs check (added with 5c89e7fa5bc2) in changelog.py
takes a bit of time even if the filteredrevs set is empty. Skipping
the check in that case shaves 0.36 seconds off a 2.14 second commit.
A 17% gain.
author | Durham Goode <durham@fb.com> |
---|---|
date | Fri, 16 Nov 2012 15:39:12 -0800 |
parents | 407209261f63 |
children | 54cedee86e51 |
files | mercurial/changelog.py mercurial/revlog.py |
diffstat | 2 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/changelog.py Thu Nov 15 11:27:30 2012 -0600 +++ b/mercurial/changelog.py Fri Nov 16 15:39:12 2012 -0800 @@ -134,9 +134,15 @@ def __iter__(self): """filtered version of revlog.__iter__""" - for i in xrange(len(self)): - if i not in self.filteredrevs: - yield i + if len(self.filteredrevs) == 0: + return revlog.revlog.__iter__(self) + + def filterediter(): + for i in xrange(len(self)): + if i not in self.filteredrevs: + yield i + + return filterediter() def revs(self, start=0, stop=None): """filtered version of revlog.revs"""
--- a/mercurial/revlog.py Thu Nov 15 11:27:30 2012 -0600 +++ b/mercurial/revlog.py Fri Nov 16 15:39:12 2012 -0800 @@ -254,8 +254,7 @@ def __len__(self): return len(self.index) - 1 def __iter__(self): - for i in xrange(len(self)): - yield i + return iter(xrange(len(self))) def revs(self, start=0, stop=None): """iterate over all rev in this revlog (from start to stop)""" if stop is None: