obscheckhead: skip context creation to test phase
authorPierre-Yves David <pierre-yves.david@octobus.net>
Fri, 19 May 2017 12:35:14 +0200
changeset 32370 8fb5f452e69c
parent 32369 ab5f5429e3d2
child 32371 7aa4a4cf0dde
obscheckhead: skip context creation to test phase On repository with many many heads, this is called often enough to show an overhead to appears in some profile. So we skip the 'changectx' creation to test the node phases.
mercurial/discovery.py
--- a/mercurial/discovery.py	Fri May 19 02:44:30 2017 +0200
+++ b/mercurial/discovery.py	Fri May 19 12:35:14 2017 +0200
@@ -431,6 +431,7 @@
     repo = pushop.repo
     unfi = repo.unfiltered()
     tonode = unfi.changelog.node
+    torev = unfi.changelog.rev
     public = phases.public
     getphase = unfi._phasecache.phase
     ispublic = (lambda r: getphase(unfi, r) == public)
@@ -460,8 +461,7 @@
     while localcandidate:
         nh = localcandidate.pop()
         # run this check early to skip the evaluation of the whole branch
-        if (nh in futurecommon
-                or unfi[nh].phase() <= public):
+        if (nh in futurecommon or ispublic(torev(nh))):
             newhs.add(nh)
             continue