Mercurial > hg
comparison mercurial/setdiscovery.py @ 39171:abce899c985f
setdiscovery: pass head revisions into sample functions
This eliminates the last remaining consumer of heads() and
related functionality in dagutil.
Differential Revision: https://phab.mercurial-scm.org/D4319
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 17 Aug 2018 17:54:10 +0000 |
parents | 754f389b87f2 |
children | 8973fc62bfff |
comparison
equal
deleted
inserted
replaced
39170:754f389b87f2 | 39171:abce899c985f |
---|---|
90 for p in dag.parents(curr): | 90 for p in dag.parents(curr): |
91 if not revs or p in revs: | 91 if not revs or p in revs: |
92 dist.setdefault(p, d + 1) | 92 dist.setdefault(p, d + 1) |
93 visit.append(p) | 93 visit.append(p) |
94 | 94 |
95 def _takequicksample(repo, dag, revs, size): | 95 def _takequicksample(repo, dag, headrevs, revs, size): |
96 """takes a quick sample of size <size> | 96 """takes a quick sample of size <size> |
97 | 97 |
98 It is meant for initial sampling and focuses on querying heads and close | 98 It is meant for initial sampling and focuses on querying heads and close |
99 ancestors of heads. | 99 ancestors of heads. |
100 | 100 |
101 :dag: a dag object | 101 :dag: a dag object |
102 :headrevs: set of head revisions in local DAG to consider | |
102 :revs: set of revs to discover | 103 :revs: set of revs to discover |
103 :size: the maximum size of the sample""" | 104 :size: the maximum size of the sample""" |
104 sample = set(repo.revs('heads(%ld)', revs)) | 105 sample = set(repo.revs('heads(%ld)', revs)) |
105 | 106 |
106 if len(sample) >= size: | 107 if len(sample) >= size: |
107 return _limitsample(sample, size) | 108 return _limitsample(sample, size) |
108 | 109 |
109 _updatesample(dag, None, dag.heads(), sample, quicksamplesize=size) | 110 _updatesample(dag, None, headrevs, sample, quicksamplesize=size) |
110 return sample | 111 return sample |
111 | 112 |
112 def _takefullsample(repo, dag, revs, size): | 113 def _takefullsample(repo, dag, headrevs, revs, size): |
113 sample = set(repo.revs('heads(%ld)', revs)) | 114 sample = set(repo.revs('heads(%ld)', revs)) |
114 | 115 |
115 # update from heads | 116 # update from heads |
116 _updatesample(dag, revs, dag.headsetofconnecteds(revs), sample) | 117 _updatesample(dag, revs, dag.headsetofconnecteds(revs), sample) |
117 # update from roots | 118 # update from roots |
241 samplefunc = _takequicksample | 242 samplefunc = _takequicksample |
242 targetsize = initialsamplesize | 243 targetsize = initialsamplesize |
243 if len(undecided) < targetsize: | 244 if len(undecided) < targetsize: |
244 sample = list(undecided) | 245 sample = list(undecided) |
245 else: | 246 else: |
246 sample = samplefunc(local, dag, undecided, targetsize) | 247 sample = samplefunc(local, dag, ownheads, undecided, targetsize) |
247 | 248 |
248 roundtrips += 1 | 249 roundtrips += 1 |
249 progress.update(roundtrips) | 250 progress.update(roundtrips) |
250 ui.debug("query %i; still undecided: %i, sample size is: %i\n" | 251 ui.debug("query %i; still undecided: %i, sample size is: %i\n" |
251 % (roundtrips, len(undecided), len(sample))) | 252 % (roundtrips, len(undecided), len(sample))) |