Mercurial > public > mercurial-scm > hg
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 |