# HG changeset patch # User Martin von Zweigbergk # Date 2018-04-13 17:36:03 # Node ID 8e8541610d85c1e8b278785e2291de6ca2f81439 # Parent 24fee31fda05ac20e80facd42a811e13144d42cc scmutil: make shortesthexnodeidprefix() use unfiltered repo Both callers were doing this, and resolvehexnodeidprefix() was also working on the unfiltered repo, so it makes more sense to have it all in one place. Differential Revision: https://phab.mercurial-scm.org/D3313 diff --git a/hgext/show.py b/hgext/show.py --- a/hgext/show.py +++ b/hgext/show.py @@ -447,10 +447,8 @@ def longestshortest(repo, revs, minlen=4 """ if not revs: return minlen - # don't use filtered repo because it's slow. see templater.shortest(). cl = repo.changelog - return max(len(scmutil.shortesthexnodeidprefix(repo.unfiltered(), - hex(cl.node(r)), + return max(len(scmutil.shortesthexnodeidprefix(repo, hex(cl.node(r)), minlen)) for r in revs) # Adjust the docstring of the show command so it shows all registered views. diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -436,7 +436,7 @@ def formatrevnode(ui, rev, node): def resolvehexnodeidprefix(repo, prefix): # Uses unfiltered repo because it's faster when prefix is ambiguous/ - # This matches the "shortest" template function. + # This matches the shortesthexnodeidprefix() function below. node = repo.unfiltered().changelog._partialmatch(prefix) if node is None: return @@ -445,7 +445,10 @@ def resolvehexnodeidprefix(repo, prefix) def shortesthexnodeidprefix(repo, hexnode, minlength=1): """Find the shortest unambiguous prefix that matches hexnode.""" - return repo.changelog.shortest(hexnode, minlength) + # _partialmatch() of filtered changelog could take O(len(repo)) time, + # which would be unacceptably slow. so we look for hash collision in + # unfiltered space, which means some hashes may be slightly longer. + return repo.unfiltered().changelog.shortest(hexnode, minlength) def isrevsymbol(repo, symbol): """Checks if a symbol exists in the repo. diff --git a/mercurial/templatefuncs.py b/mercurial/templatefuncs.py --- a/mercurial/templatefuncs.py +++ b/mercurial/templatefuncs.py @@ -587,11 +587,8 @@ def shortest(context, mapping, args): # i18n: "shortest" is a keyword _("shortest() expects an integer minlength")) - # _partialmatch() of filtered changelog could take O(len(repo)) time, - # which would be unacceptably slow. so we look for hash collision in - # unfiltered space, which means some hashes may be slightly longer. repo = context.resource(mapping, 'ctx')._repo - return scmutil.shortesthexnodeidprefix(repo.unfiltered(), node, minlength) + return scmutil.shortesthexnodeidprefix(repo, node, minlength) @templatefunc('strip(text[, chars])') def strip(context, mapping, args):