[PATCH 09 of 10 V3] discovery: add a simple `addinfo` method
Boris Feld
boris.feld at octobus.net
Fri Jan 4 17:45:28 EST 2019
# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1545965978 -3600
# Fri Dec 28 03:59:38 2018 +0100
# Node ID af7fc1d08b16a56c3c0f7ab3abd9a926e79d5749
# Parent 0665d9a3f120a37f5c8755f465eae7d8d51ead15
# EXP-Topic discovery-refactor
# Available At https://bitbucket.org/octobus/mercurial-devel/
# hg pull https://bitbucket.org/octobus/mercurial-devel/ -r af7fc1d08b16
discovery: add a simple `addinfo` method
The method can directly process a sample result. This makes the main code
simpler to follow.
diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py
--- a/mercurial/setdiscovery.py
+++ b/mercurial/setdiscovery.py
@@ -195,6 +195,20 @@ class partialdiscovery(object):
self.undecided.difference_update(self.missing)
+ def addinfo(self, sample):
+ """consume an iterable of (rev, known) tuples"""
+ common = set()
+ missing = set()
+ for rev, known in sample:
+ if known:
+ common.add(rev)
+ else:
+ missing.add(rev)
+ if common:
+ self.addcommons(common)
+ if missing:
+ self.addmissings(missing)
+
def hasinfo(self):
"""return True is we have any clue about the remote state"""
return self._common.hasbases()
@@ -285,21 +299,12 @@ def findcommonheads(ui, local, remote,
# treat remote heads (and maybe own heads) as a first implicit sample
# response
disco.addcommons(srvheads)
- commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
- disco.addcommons(commoninsample)
+ disco.addinfo(zip(sample, yesno))
full = False
progress = ui.makeprogress(_('searching'), unit=_('queries'))
while not disco.iscomplete():
- if sample:
- missinginsample = [n for i, n in enumerate(sample) if not yesno[i]]
- disco.addmissings(missinginsample)
-
-
- if disco.iscomplete():
- break
-
if full or disco.hasinfo():
if full:
ui.note(_("sampling from both directions\n"))
@@ -328,9 +333,7 @@ def findcommonheads(ui, local, remote,
full = True
- if sample:
- commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
- disco.addcommons(commoninsample)
+ disco.addinfo(zip(sample, yesno))
# heads(common) == heads(common.bases) since common represents common.bases
# and all its ancestors
More information about the Mercurial-devel
mailing list