discovery: move common heads computation inside partialdiscovery object
authorBoris Feld <boris.feld@octobus.net>
Fri, 28 Dec 2018 03:28:02 +0100
changeset 41113 9815d3337f9b
parent 41112 3023bc4b3da0
child 41114 b31a41f24864
discovery: move common heads computation inside partialdiscovery object This remove one of the private attribute access. In additions, head tracking and computation is a typical operation we can speed up using Rust.
mercurial/setdiscovery.py
--- a/mercurial/setdiscovery.py	Fri Dec 28 03:14:34 2018 +0100
+++ b/mercurial/setdiscovery.py	Fri Dec 28 03:28:02 2018 +0100
@@ -182,6 +182,13 @@
         """return True is we have any clue about the remote state"""
         return self._common.hasbases()
 
+    def commonheads(self):
+        """the heads of the known common set"""
+        # heads(common) == heads(common.bases) since common represents
+        # common.bases and all its ancestors
+        # The presence of nullrev will confuse heads(). So filter it out.
+        return set(self._repo.revs('heads(%ld)',
+                   self._common.bases - {nullrev}))
 
 def findcommonheads(ui, local, remote,
                     initialsamplesize=100,
@@ -311,10 +318,7 @@
             disco.addcommons(commoninsample)
             disco._common.removeancestorsfrom(undecided)
 
-    # heads(common) == heads(common.bases) since common represents common.bases
-    # and all its ancestors
-    # The presence of nullrev will confuse heads(). So filter it out.
-    result = set(local.revs('heads(%ld)', disco._common.bases - {nullrev}))
+    result = disco.commonheads()
     elapsed = util.timer() - start
     progress.complete()
     ui.debug("%d total queries in %.4fs\n" % (roundtrips, elapsed))