# HG changeset patch # User Martin von Zweigbergk # Date 2018-02-13 21:23:18 # Node ID b42c47b8c9d4c4f8c396915aa70d87a328a521b4 # Parent 8173eeb69fb3b3876c7baecf0a400fb97fabc759 treemanifest: add an optimized __nonzero__() We use bool(manifest) in at least some places: localrepo.py:1730 hgweb/webcommands.py:524 Since the treemanifest class doesn't define __nonzero__() (before this patch), bool(manifest) will instead call __len__(), which can be slow for treemanifests. This patch may make a noticeable difference in the localrepo case above, but that only happens when committing a merge and I haven't timed it. Note that Durham already added a __nonzero__ implementation to manifestdict in b19291e5d506 (manifest: add __nonzero__ method, 2016-11-03). Differential Revision: https://phab.mercurial-scm.org/D2232 diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -755,6 +755,12 @@ class treemanifest(object): size += m.__len__() return size + def __nonzero__(self): + # Faster than "__len() != 0" since it avoids loading sub-manifests + return not self._isempty() + + __bool__ = __nonzero__ + def _isempty(self): self._load() # for consistency; already loaded by all callers return (not self._files and (not self._dirs or