Show More
@@ -358,14 +358,34 b' def querydrev(repo, params, stack=False)' | |||
|
358 | 358 | order that the latter ones depend on the former ones. Otherwise, return a |
|
359 | 359 | list of a unique "Differential Revision dict". |
|
360 | 360 | """ |
|
361 | prefetched = {} # {id or phid: drev} | |
|
362 | def fetch(params): | |
|
363 | """params -> single drev or None""" | |
|
364 | key = (params.get(r'ids') or params.get(r'phids') or [None])[0] | |
|
365 | if key in prefetched: | |
|
366 | return prefetched[key] | |
|
367 | # Otherwise, send the request. If we're fetching a stack, be smarter | |
|
368 | # and fetch more ids in one batch, even if it could be unnecessary. | |
|
369 | batchparams = params | |
|
370 | if stack and len(params.get(r'ids', [])) == 1: | |
|
371 | i = int(params[r'ids'][0]) | |
|
372 | # developer config: phabricator.batchsize | |
|
373 | batchsize = repo.ui.configint('phabricator', 'batchsize', 12) | |
|
374 | batchparams = {'ids': range(max(1, i - batchsize), i + 1)} | |
|
375 | drevs = callconduit(repo, 'differential.query', batchparams) | |
|
376 | # Fill prefetched with the result | |
|
377 | for drev in drevs: | |
|
378 | prefetched[drev[r'phid']] = drev | |
|
379 | prefetched[int(drev[r'id'])] = drev | |
|
380 | if key not in prefetched: | |
|
381 | raise error.Abort(_('cannot get Differential Revision %r') % params) | |
|
382 | return prefetched[key] | |
|
383 | ||
|
361 | 384 | result = [] |
|
362 | 385 | queue = [params] |
|
363 | 386 | while queue: |
|
364 | 387 | params = queue.pop() |
|
365 | drevs = callconduit(repo, 'differential.query', params) | |
|
366 | if len(drevs) != 1: | |
|
367 | raise error.Abort(_('cannot get Differential Revision %r') % params) | |
|
368 | drev = drevs[0] | |
|
388 | drev = fetch(params) | |
|
369 | 389 | result.append(drev) |
|
370 | 390 | if stack: |
|
371 | 391 | auxiliary = drev.get(r'auxiliary', {}) |
General Comments 0
You need to be logged in to leave comments.
Login now