[PATCH 2 of 2] obscheckhead: skip context creation to test phase

Pierre-Yves David pierre-yves.david at ens-lyon.org
Fri May 19 06:46:04 EDT 2017


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at octobus.net>
# Date 1495190114 -7200
#      Fri May 19 12:35:14 2017 +0200
# Node ID b88f7405eb381246abf6e2a6667f60e2612304c7
# Parent  6859efcbf87d071d2c8afab08936bb3995031dcb
# EXP-Topic checkhead-test
# Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
#              hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r b88f7405eb38
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.

diff --git a/mercurial/discovery.py b/mercurial/discovery.py
--- a/mercurial/discovery.py
+++ b/mercurial/discovery.py
@@ -431,6 +431,7 @@ def _postprocessobsolete(pushop, futurec
     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 @@ def _postprocessobsolete(pushop, futurec
     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
 


More information about the Mercurial-devel mailing list