comparison mercurial/templatefuncs.py @ 37865:da083d9fafab

shortest: don't keep checking for longer prefix if node doesn't exist (API) If revlog.shortest() is called with an invalid nodeid, we keep checking if longer and longer prefixes are valid. We call revlog._partialmatch() for each prefix. That function will give us None if the node doesn't exist (and a RevlogError if it's ambiguous), so there's no need to keep checking. This patch instead makes revlog.shortest() raise a LookupError is the node does not exist, and updates the caller to handle it. Before this patch, revlog.shortest() would return the full hexnode for nonexistent nodeids. By the same reasoning as in 7b2955624777 (scmutil: make shortesthexnodeidprefix() take a full binary nodeid, 2018-04-14), it's not revlog.shortest() that should decide how to present nonexistent nodeids, so that's now moved to the template function. This should speed up cases where {shortest()} is applied to an invalid nodeid, but I couldn't think of a reasonable case where that would happen. Differential Revision: https://phab.mercurial-scm.org/D3461
author Martin von Zweigbergk <martinvonz@google.com>
date Sat, 05 May 2018 00:16:43 -0700
parents 66dc9db6ed2c
children faa41fd282d1
comparison
equal deleted inserted replaced
37864:890bdf0e33c8 37865:da083d9fafab
606 node = wdirid 606 node = wdirid
607 except error.LookupError: 607 except error.LookupError:
608 return hexnode 608 return hexnode
609 if not node: 609 if not node:
610 return hexnode 610 return hexnode
611 return scmutil.shortesthexnodeidprefix(repo, node, minlength) 611 try:
612 return scmutil.shortesthexnodeidprefix(repo, node, minlength)
613 except error.RepoLookupError:
614 return hexnode
612 615
613 @templatefunc('strip(text[, chars])') 616 @templatefunc('strip(text[, chars])')
614 def strip(context, mapping, args): 617 def strip(context, mapping, args):
615 """Strip characters from a string. By default, 618 """Strip characters from a string. By default,
616 strips all leading and trailing whitespace.""" 619 strips all leading and trailing whitespace."""