changeset 33000:d3d36bcdf036

dagop: just compare with the last value to deduplicate input of revancestors() Since we're using a max heap, the current rev should be a duplicate only if it equals to the previous one. We don't have to maintain the whole seen set. # reverse(ancestors(tip)) using hg repo 0) 0.086420 1) 0.081051
author Yuya Nishihara <yuya@tcha.org>
date Sun, 18 Jun 2017 08:59:09 +0900
parents 08e2793d9f65
children 92d0945a15e0
files mercurial/dagop.py
diffstat 1 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dagop.py	Sun Jun 18 17:22:57 2017 +0900
+++ b/mercurial/dagop.py	Sun Jun 18 08:59:09 2017 +0900
@@ -37,15 +37,15 @@
     if inputrev is not None:
         heapq.heappush(pendingheap, -inputrev)
 
-    seen = set()
+    lastrev = None
     while pendingheap:
         currev = -heapq.heappop(pendingheap)
         if currev == inputrev:
             inputrev = next(irevs, None)
             if inputrev is not None:
                 heapq.heappush(pendingheap, -inputrev)
-        if currev not in seen:
-            seen.add(currev)
+        if currev != lastrev:
+            lastrev = currev
             yield currev
             try:
                 for prev in cl.parentrevs(currev)[:cut]: