Show More
@@ -259,6 +259,37 b' class incrementalmissingancestors(object' | |||
|
259 | 259 | missing.reverse() |
|
260 | 260 | return missing |
|
261 | 261 | |
|
262 | # Extracted from lazyancestors.__iter__ to avoid a reference cycle | |
|
263 | def _lazyancestorsiter(parentrevs, initrevs, stoprev, inclusive): | |
|
264 | seen = {nullrev} | |
|
265 | revs = initrevs | |
|
266 | ||
|
267 | schedule = heapq.heappush | |
|
268 | nextitem = heapq.heappop | |
|
269 | see = seen.add | |
|
270 | ||
|
271 | if inclusive: | |
|
272 | visit = [-r for r in revs] | |
|
273 | seen.update(revs) | |
|
274 | heapq.heapify(visit) | |
|
275 | else: | |
|
276 | visit = [] | |
|
277 | heapq.heapify(visit) | |
|
278 | for r in revs: | |
|
279 | for parent in parentrevs(r): | |
|
280 | if parent not in seen: | |
|
281 | schedule(visit, -parent) | |
|
282 | see(parent) | |
|
283 | ||
|
284 | while visit: | |
|
285 | current = -nextitem(visit) | |
|
286 | if current >= stoprev: | |
|
287 | yield current | |
|
288 | for parent in parentrevs(current): | |
|
289 | if parent not in seen: | |
|
290 | schedule(visit, -parent) | |
|
291 | see(parent) | |
|
292 | ||
|
262 | 293 | class lazyancestors(object): |
|
263 | 294 | def __init__(self, pfunc, revs, stoprev=0, inclusive=False): |
|
264 | 295 | """Create a new object generating ancestors for the given revs. Does |
@@ -311,36 +342,9 b' class lazyancestors(object):' | |||
|
311 | 342 | |
|
312 | 343 | If inclusive is True, the source revisions are also yielded. The |
|
313 | 344 | reverse revision number order is still enforced.""" |
|
314 | seen = {nullrev} | |
|
315 | revs = self._initrevs | |
|
316 | ||
|
317 | parentrevs = self._parentrevs | |
|
318 | stoprev = self._stoprev | |
|
319 | schedule = heapq.heappush | |
|
320 | nextitem = heapq.heappop | |
|
321 | see = seen.add | |
|
322 | ||
|
323 | if self._inclusive: | |
|
324 | visit = [-r for r in revs] | |
|
325 | seen.update(revs) | |
|
326 | heapq.heapify(visit) | |
|
327 | else: | |
|
328 | visit = [] | |
|
329 | heapq.heapify(visit) | |
|
330 | for r in revs: | |
|
331 | for parent in parentrevs(r): | |
|
332 | if parent not in seen: | |
|
333 | schedule(visit, -parent) | |
|
334 | see(parent) | |
|
335 | ||
|
336 | while visit: | |
|
337 | current = -nextitem(visit) | |
|
338 | if current >= stoprev: | |
|
339 | yield current | |
|
340 | for parent in parentrevs(current): | |
|
341 | if parent not in seen: | |
|
342 | schedule(visit, -parent) | |
|
343 | see(parent) | |
|
345 | for rev in _lazyancestorsiter(self._parentrevs, self._initrevs, | |
|
346 | self._stoprev, self._inclusive): | |
|
347 | yield rev | |
|
344 | 348 | |
|
345 | 349 | def __contains__(self, target): |
|
346 | 350 | """Test whether target is an ancestor of self._initrevs.""" |
General Comments 0
You need to be logged in to leave comments.
Login now