# HG changeset patch # User Yuya Nishihara # Date 2018-09-10 13:34:19 # Node ID 238a1480d7adb12367589c0233e93297c4d3bf22 # Parent ca9983c35d893b01d661bb35d5a0dcfe6feaadcc ancestor: use heapreplace() in place of heappop/heappush() This should be slightly faster. Overall perfancestors result:: cpython nginx mercurial ------------- ---------------- ---------------- ---------------- b6db2e80a9ce^ 0.103461 0.006303 0.035716 8eb2145ff0fb 0.192307 (x1.86) 0.012115 (x1.92) 0.052135 (x1.46) this patch 0.139986 (x1.35) 0.006389 (x1.01) 0.037176 (x1.04) diff --git a/mercurial/ancestor.py b/mercurial/ancestor.py --- a/mercurial/ancestor.py +++ b/mercurial/ancestor.py @@ -264,6 +264,7 @@ def _lazyancestorsiter(parentrevs, initr seen = {nullrev} heappush = heapq.heappush heappop = heapq.heappop + heapreplace = heapq.heapreplace see = seen.add if inclusive: @@ -294,8 +295,7 @@ def _lazyancestorsiter(parentrevs, initr if current - p1 == 1: visit[0] = -p1 else: - heappop(visit) - heappush(visit, -p1) + heapreplace(visit, -p1) see(p1) else: heappop(visit)