diff -r 57875cf423c9 -r 2372284d9457 mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py Sat Oct 05 10:29:34 2019 -0400 +++ b/mercurial/setdiscovery.py Sun Oct 06 09:45:02 2019 -0400 @@ -56,6 +56,7 @@ util, ) + def _updatesample(revs, heads, sample, parentfn, quicksamplesize=0): """update an existing sample to match the expected size @@ -93,6 +94,7 @@ dist.setdefault(p, d + 1) visit.append(p) + def _limitsample(sample, desiredlen, randomize=True): """return a random subset of sample of at most desiredlen item. @@ -107,6 +109,7 @@ sample.sort() return set(sample[:desiredlen]) + class partialdiscovery(object): """an object representing ongoing discovery @@ -184,8 +187,10 @@ def _parentsgetter(self): getrev = self._repo.changelog.index.__getitem__ + def getparents(r): return getrev(r)[5:7] + return getparents def _childrengetter(self): @@ -234,8 +239,9 @@ if len(sample) >= size: return _limitsample(sample, size, randomize=self.randomize) - _updatesample(None, headrevs, sample, self._parentsgetter(), - quicksamplesize=size) + _updatesample( + None, headrevs, sample, self._parentsgetter(), quicksamplesize=size + ) return sample def takefullsample(self, headrevs, size): @@ -270,16 +276,22 @@ sample.update(takefrom[:more]) return sample -partialdiscovery = policy.importrust(r'discovery', - member=r'PartialDiscovery', - default=partialdiscovery) + +partialdiscovery = policy.importrust( + r'discovery', member=r'PartialDiscovery', default=partialdiscovery +) + -def findcommonheads(ui, local, remote, - initialsamplesize=100, - fullsamplesize=200, - abortwhenunrelated=True, - ancestorsof=None, - samplegrowth=1.05): +def findcommonheads( + ui, + local, + remote, + initialsamplesize=100, + fullsamplesize=200, + abortwhenunrelated=True, + ancestorsof=None, + samplegrowth=1.05, +): '''Return a tuple (common, anyincoming, remoteheads) used to identify missing nodes from or in remote. ''' @@ -358,9 +370,7 @@ with remote.commandexecutor() as e: fheads = e.callcommand('heads', {}) - fknown = e.callcommand('known', { - 'nodes': [clnode(r) for r in sample], - }) + fknown = e.callcommand('known', {'nodes': [clnode(r) for r in sample],}) srvheadhashes, yesno = fheads.result(), fknown.result() @@ -396,8 +406,9 @@ # full blown discovery randomize = ui.configbool('devel', 'discovery.randomize') - disco = partialdiscovery(local, ownheads, remote.limitedarguments, - randomize=randomize) + disco = partialdiscovery( + local, ownheads, remote.limitedarguments, randomize=randomize + ) # treat remote heads (and maybe own heads) as a first implicit sample # response disco.addcommons(knownsrvheads) @@ -426,16 +437,18 @@ roundtrips += 1 progress.update(roundtrips) stats = disco.stats() - ui.debug("query %i; still undecided: %i, sample size is: %i\n" - % (roundtrips, stats['undecided'], len(sample))) + ui.debug( + "query %i; still undecided: %i, sample size is: %i\n" + % (roundtrips, stats['undecided'], len(sample)) + ) # indices between sample and externalized version must match sample = list(sample) with remote.commandexecutor() as e: - yesno = e.callcommand('known', { - 'nodes': [clnode(r) for r in sample], - }).result() + yesno = e.callcommand( + 'known', {'nodes': [clnode(r) for r in sample],} + ).result() full = True @@ -445,19 +458,24 @@ elapsed = util.timer() - start progress.complete() ui.debug("%d total queries in %.4fs\n" % (roundtrips, elapsed)) - msg = ('found %d common and %d unknown server heads,' - ' %d roundtrips in %.4fs\n') + msg = ( + 'found %d common and %d unknown server heads,' + ' %d roundtrips in %.4fs\n' + ) missing = set(result) - set(knownsrvheads) - ui.log('discovery', msg, len(result), len(missing), roundtrips, - elapsed) + ui.log('discovery', msg, len(result), len(missing), roundtrips, elapsed) if not result and srvheadhashes != [nullid]: if abortwhenunrelated: raise error.Abort(_("repository is unrelated")) else: ui.warn(_("warning: repository is unrelated\n")) - return ({nullid}, True, srvheadhashes,) + return ( + {nullid}, + True, + srvheadhashes, + ) - anyincoming = (srvheadhashes != [nullid]) + anyincoming = srvheadhashes != [nullid] result = {clnode(r) for r in result} return result, anyincoming, srvheadhashes