# HG changeset patch # User Yuya Nishihara # Date 1516365551 -32400 # Node ID 29f57ce416edc29ee10d87507450f76ac9740f34 # Parent 693e3bcae19eff6dbd7333f8024cc955c1111e64 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. diff -r 693e3bcae19e -r 29f57ce416ed mercurial/localrepo.py --- 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)