comparison mercurial/manifest.py @ 36174:b42c47b8c9d4

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
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 13 Feb 2018 13:23:18 -0800
parents 59adb3051718
children 413c179cf7d5
comparison
equal deleted inserted replaced
36173:8173eeb69fb3 36174:b42c47b8c9d4
753 size = len(self._files) 753 size = len(self._files)
754 for m in self._dirs.values(): 754 for m in self._dirs.values():
755 size += m.__len__() 755 size += m.__len__()
756 return size 756 return size
757 757
758 def __nonzero__(self):
759 # Faster than "__len() != 0" since it avoids loading sub-manifests
760 return not self._isempty()
761
762 __bool__ = __nonzero__
763
758 def _isempty(self): 764 def _isempty(self):
759 self._load() # for consistency; already loaded by all callers 765 self._load() # for consistency; already loaded by all callers
760 return (not self._files and (not self._dirs or 766 return (not self._files and (not self._dirs or
761 all(m._isempty() for m in self._dirs.values()))) 767 all(m._isempty() for m in self._dirs.values())))
762 768