--- a/mercurial/scmutil.py Mon Aug 20 15:57:03 2018 -0700
+++ b/mercurial/scmutil.py Sun Aug 05 00:42:07 2018 -0700
@@ -34,6 +34,7 @@
obsutil,
pathutil,
phases,
+ policy,
pycompat,
revsetlang,
similar,
@@ -52,6 +53,8 @@
else:
from . import scmposix as scmplatform
+parsers = policy.importmod(r'parsers')
+
termsize = scmplatform.termsize
class status(tuple):
@@ -514,6 +517,24 @@
cache['disambiguationrevset'] = revs
if cl.rev(node) in revs:
hexnode = hex(node)
+ nodetree = None
+ if cache is not None:
+ nodetree = cache.get('disambiguationnodetree')
+ if not nodetree:
+ try:
+ nodetree = parsers.nodetree(cl.index, len(revs))
+ except AttributeError:
+ # no native nodetree
+ pass
+ else:
+ for r in revs:
+ nodetree.insert(r)
+ if cache is not None:
+ cache['disambiguationnodetree'] = nodetree
+ if nodetree is not None:
+ length = max(nodetree.shortest(node), minlength)
+ prefix = hexnode[:length]
+ return disambiguate(prefix)
for length in range(minlength, len(hexnode) + 1):
matches = []
prefix = hexnode[:length]