diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py index 0fc4686de1d762844c21f134bc6fdb010b7e6ec5_bWVyY3VyaWFsL3NldGRpc2NvdmVyeS5weQ==..ee45f5c2ffcc7d1a09306b334eaba4b5bfdd74e7_bWVyY3VyaWFsL3NldGRpc2NvdmVyeS5weQ== 100644 --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -105,11 +105,10 @@ # 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 @@ -111,8 +110,14 @@ 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,