23 else: |
23 else: |
24 cut = None |
24 cut = None |
25 cl = repo.changelog |
25 cl = repo.changelog |
26 |
26 |
27 def iterate(): |
27 def iterate(): |
28 revqueue, revsnode = None, None |
28 revqueue, inputrev = None, None |
29 h = [] |
29 h = [] |
30 |
30 |
31 revs.sort(reverse=True) |
31 revs.sort(reverse=True) |
32 revqueue = util.deque(revs) |
32 revqueue = util.deque(revs) |
33 if revqueue: |
33 if revqueue: |
34 revsnode = revqueue.popleft() |
34 inputrev = revqueue.popleft() |
35 heapq.heappush(h, -revsnode) |
35 heapq.heappush(h, -inputrev) |
36 |
36 |
37 seen = set() |
37 seen = set() |
38 while h: |
38 while h: |
39 current = -heapq.heappop(h) |
39 current = -heapq.heappop(h) |
40 if current not in seen: |
40 if current not in seen: |
41 if revsnode and current == revsnode: |
41 if inputrev and current == inputrev: |
42 if revqueue: |
42 if revqueue: |
43 revsnode = revqueue.popleft() |
43 inputrev = revqueue.popleft() |
44 heapq.heappush(h, -revsnode) |
44 heapq.heappush(h, -inputrev) |
45 seen.add(current) |
45 seen.add(current) |
46 yield current |
46 yield current |
47 for parent in cl.parentrevs(current)[:cut]: |
47 for parent in cl.parentrevs(current)[:cut]: |
48 if parent != node.nullrev: |
48 if parent != node.nullrev: |
49 heapq.heappush(h, -parent) |
49 heapq.heappush(h, -parent) |