Mercurial > hg
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]: