D8565: mergestate: optimize unresolvedcount() a little bit

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

D8565: mergestate: optimize unresolvedcount() a little bit

valentin.gatienbaron (Valentin Gatien-Baron)
durin42 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  It struck me as wasteful to make this extra list copy of a generator. I was
  hoping to manage to return a bool instead of an int (and thus avoid traversing
  the dictionary past the first unresolved entry) but at least one caller cares
  about the count and this is the easy way forward while still making me
  marginally happier.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8565

AFFECTED FILES
  mercurial/mergestate.py

CHANGE DETAILS

diff --git a/mercurial/mergestate.py b/mercurial/mergestate.py
--- a/mercurial/mergestate.py
+++ b/mercurial/mergestate.py
@@ -79,6 +79,12 @@
 ACTION_GET_OTHER_AND_STORE = b'gs'
 
 
+_MERGE_UNRESOLVED_STATES = {
+    MERGE_RECORD_UNRESOLVED,
+    MERGE_RECORD_UNRESOLVED_PATH,
+}
+
+
 class mergestate(object):
     '''track 3-way merge state of individual files
 
@@ -569,10 +575,7 @@
         """Obtain the paths of unresolved files."""
 
         for f, entry in pycompat.iteritems(self._state):
-            if entry[0] in (
-                MERGE_RECORD_UNRESOLVED,
-                MERGE_RECORD_UNRESOLVED_PATH,
-            ):
+            if entry[0] in _MERGE_UNRESOLVED_STATES:
                 yield f
 
     def driverresolved(self):
@@ -713,7 +716,13 @@
 
     def unresolvedcount(self):
         """get unresolved count for this merge (persistent)"""
-        return len(list(self.unresolved()))
+        return len(
+            [
+                None
+                for entry in pycompat.itervalues(self._state)
+                if entry[0] in _MERGE_UNRESOLVED_STATES
+            ]
+        )
 
     def actions(self):
         """return lists of actions to perform on the dirstate"""



To: durin42, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel