Comments
Patch
@@ -20,20 +20,31 @@
cut = followfirst and 1 or None
cl = repo.changelog
- # Implementation to be changed in later patches based on revs order.
- h = list(revs)
- for i in xrange(len(h)):
- h[i] = -h[i]
- heapq.heapify(h)
- seen = set([node.nullrev])
def iterate():
+ revqueue, revsnode = None, None
+ h = []
+
+ if revs.order == 'desc':
+ revqueue = util.deque(revs)
+ if revqueue:
+ revsnode = revqueue.popleft()
+ heapq.heappush(h, -revsnode)
+ else:
+ h = [-r for r in revs]
+ heapq.heapify(h)
+
+ seen = set([node.nullrev])
while h:
current = -heapq.heappop(h)
if current not in seen:
- seen.add(current)
- yield current
- for parent in cl.parentrevs(current)[:cut]:
- heapq.heappush(h, -parent)
+ if revsnode and current == revsnode:
+ if revqueue:
+ revsnode = revqueue.popleft()
+ heapq.heappush(-revsnode)
+ seen.add(current)
+ yield current
+ for parent in cl.parentrevs(current)[:cut]:
+ heapq.heappush(h, -parent)
return descgeneratorset(iterate())