D2232: treemanifest: add an optimized __nonzero__()

2018-02-13 Thread martinvonz (Martin von Zweigbergk)
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__()

2018-02-13 Thread indygreg (Gregory Szorc)
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__()

2018-02-13 Thread martinvonz (Martin von Zweigbergk)
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