# HG changeset patch # User Pierre-Yves David # Date 2014-10-27 16:40:32 # Node ID ee45f5c2ffcc7d1a09306b334eaba4b5bfdd74e7 # Parent 0fc4686de1d762844c21f134bc6fdb010b7e6ec5 setdiscovery: extract sample limitation in a `_limitsample` function We need to reuse this logic for the initial query. We extract it in a function to unsure sample limiting is applied consistently in all cases. diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -105,14 +105,19 @@ def _takefullsample(dag, nodes, size): # update from roots _updatesample(dag.inverse(), nodes, sample, always) assert sample - if len(sample) > desiredlen: - sample = set(random.sample(sample, desiredlen)) - elif len(sample) < desiredlen: + sample = _limitsample(sample, desiredlen) + if len(sample) < desiredlen: more = desiredlen - len(sample) sample.update(random.sample(list(nodes - sample - always), more)) sample.update(always) return sample +def _limitsample(sample, desiredlen): + """return a random subset of sample of at most desiredlen item""" + if len(sample) > desiredlen: + sample = set(random.sample(sample, desiredlen)) + return sample + def findcommonheads(ui, local, remote, initialsamplesize=100, fullsamplesize=200,