D2232: treemanifest: add an optimized __nonzero__()
This revision was automatically updated to reflect the committed changes. Closed by commit rHGdbb131ffdc4d: treemanifest: add an optimized __nonzero__() (authored by martinvonz, committed by ). REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D2232?vs=5654=5684 REVISION DETAIL https://phab.mercurial-scm.org/D2232 AFFECTED FILES mercurial/manifest.py CHANGE DETAILS diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -755,6 +755,12 @@ 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 To: martinvonz, #hg-reviewers, indygreg Cc: indygreg, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D2232: treemanifest: add an optimized __nonzero__()
indygreg accepted this revision. indygreg added a comment. This revision is now accepted and ready to land. Perhaps we should formalize the manifest interface with an abstract base class... REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2232 To: martinvonz, #hg-reviewers, indygreg Cc: indygreg, mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
D2232: treemanifest: add an optimized __nonzero__()
martinvonz created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY 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 https://phab.mercurial-scm.org/rHGb19291e5d506238acd84f5890da7adadd8167e82 (manifest: add __nonzero__ method, 2016-11-03). REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2232 AFFECTED FILES mercurial/manifest.py CHANGE DETAILS diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -755,6 +755,12 @@ 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 To: martinvonz, #hg-reviewers Cc: mercurial-devel ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel