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

Reply via email to