changeset 35736:29f57ce416ed

localrepo: micro-optimize __len__() to bypass repoview Since len(changelog) isn't overridden, we don't have to validate a cache of unfiltered changelog. $ python -m timeit -n 10000 \ -s 'from mercurial import hg, ui; repo = hg.repository(ui.ui());' \ 'len(repo)' orig) 10000 loops, best of 3: 32.1 usec per loop new) 10000 loops, best of 3: 1.79 usec per loop Spotted by Jordi GutiƩrrez Hermoso.
author Yuya Nishihara <yuya@tcha.org>
date Fri, 19 Jan 2018 21:39:11 +0900
parents 693e3bcae19e
children d99b07bc69fb
files mercurial/localrepo.py
diffstat 1 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/localrepo.py	Thu Jan 18 21:18:10 2018 -0500
+++ b/mercurial/localrepo.py	Fri Jan 19 21:39:11 2018 +0900
@@ -762,7 +762,9 @@
     __bool__ = __nonzero__
 
     def __len__(self):
-        return len(self.changelog)
+        # no need to pay the cost of repoview.changelog
+        unfi = self.unfiltered()
+        return len(unfi.changelog)
 
     def __iter__(self):
         return iter(self.changelog)