comparison mercurial/revlog.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 890bdf0e33c8
children 0304f22497fa
comparison
equal deleted inserted replaced
37864:890bdf0e33c8 37865:da083d9fafab
1514 except ValueError: 1514 except ValueError:
1515 return False 1515 return False
1516 1516
1517 def isvalid(prefix): 1517 def isvalid(prefix):
1518 try: 1518 try:
1519 if self._partialmatch(prefix) is None: 1519 node = self._partialmatch(prefix)
1520 return False
1521 except error.RevlogError: 1520 except error.RevlogError:
1522 return False 1521 return False
1523 except error.WdirUnsupported: 1522 except error.WdirUnsupported:
1524 # single 'ff...' match 1523 # single 'ff...' match
1525 return True 1524 return True
1525 if node is None:
1526 raise LookupError(node, self.indexfile, _('no node'))
1526 return not isrev(prefix) 1527 return not isrev(prefix)
1527 1528
1528 hexnode = hex(node) 1529 hexnode = hex(node)
1529 shortest = hexnode 1530 shortest = hexnode
1530 startlength = max(6, minlength) 1531 startlength = max(6, minlength)