# HG changeset patch # User Gregory Szorc # Date 2018-08-17 17:26:07 # Node ID 14099275018796ed0065b9e2a54e12b06e40fac1 # Parent 2d218db7389b5c4d7b9f64372abebb54af0a38fe setdiscovery: use a revset for finding DAG heads in a subset The march towards moving away from dagutil continues. Like other patches moving us away from dagutil, there is the potential for regressions to occur because revlogdag's headsetofconnecteds() uses revlog.index, which doesn't take filtering into account. The revset layer does. But no tests fail, so we appear to be in the clear. Differential Revision: https://phab.mercurial-scm.org/D4317 diff --git a/mercurial/setdiscovery.py b/mercurial/setdiscovery.py --- a/mercurial/setdiscovery.py +++ b/mercurial/setdiscovery.py @@ -96,7 +96,7 @@ def _updatesample(dag, revs, sample, qui dist.setdefault(p, d + 1) visit.append(p) -def _takequicksample(dag, revs, size): +def _takequicksample(repo, dag, revs, size): """takes a quick sample of size It is meant for initial sampling and focuses on querying heads and close @@ -105,14 +105,16 @@ def _takequicksample(dag, revs, size): :dag: a dag object :revs: set of revs to discover :size: the maximum size of the sample""" - sample = dag.headsetofconnecteds(revs) + sample = set(repo.revs('heads(%ld)', revs)) + if len(sample) >= size: return _limitsample(sample, size) _updatesample(dag, None, sample, quicksamplesize=size) return sample -def _takefullsample(dag, revs, size): - sample = dag.headsetofconnecteds(revs) +def _takefullsample(repo, dag, revs, size): + sample = set(repo.revs('heads(%ld)', revs)) + # update from heads _updatesample(dag, revs, sample) # update from roots @@ -242,7 +244,7 @@ def findcommonheads(ui, local, remote, if len(undecided) < targetsize: sample = list(undecided) else: - sample = samplefunc(dag, undecided, targetsize) + sample = samplefunc(local, dag, undecided, targetsize) roundtrips += 1 progress.update(roundtrips)