ancestor: use heapreplace() in place of heappop/heappush()
authorYuya Nishihara <yuya@tcha.org>
Mon, 10 Sep 2018 22:34:19 +0900
changeset 39538 238a1480d7ad
parent 39537 ca9983c35d89
child 39539 8d8e61df8259
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)
mercurial/ancestor.py
--- a/mercurial/ancestor.py	Tue Sep 11 22:36:51 2018 +0900
+++ b/mercurial/ancestor.py	Mon Sep 10 22:34:19 2018 +0900
@@ -264,6 +264,7 @@
     seen = {nullrev}
     heappush = heapq.heappush
     heappop = heapq.heappop
+    heapreplace = heapq.heapreplace
     see = seen.add
 
     if inclusive:
@@ -294,8 +295,7 @@
             if current - p1 == 1:
                 visit[0] = -p1
             else:
-                heappop(visit)
-                heappush(visit, -p1)
+                heapreplace(visit, -p1)
             see(p1)
         else:
             heappop(visit)