comparison mercurial/scmutil.py @ 37709:7b2955624777

scmutil: make shortesthexnodeidprefix() take a full binary nodeid The shortest() template function depended on the behavior of revlog._partialmatch() for these types of inputs: * non-hex strings * ambiguous strings * too long strings revlog._partialmatch() seems to return the input unchanged in these cases, but we shouldn't depend on such a low-level function to match the behavior we want in the user-facing template function. Instead, let's handle these cases in the template function and always pass a binary nodeid to _partialmatch(). Differential Revision: https://phab.mercurial-scm.org/D3371
author Martin von Zweigbergk <martinvonz@google.com>
date Sat, 14 Apr 2018 00:13:08 -0700
parents 8e8541610d85
children 7269b87f817c
comparison
equal deleted inserted replaced
37708:8e8541610d85 37709:7b2955624777
441 if node is None: 441 if node is None:
442 return 442 return
443 repo.changelog.rev(node) # make sure node isn't filtered 443 repo.changelog.rev(node) # make sure node isn't filtered
444 return node 444 return node
445 445
446 def shortesthexnodeidprefix(repo, hexnode, minlength=1): 446 def shortesthexnodeidprefix(repo, node, minlength=1):
447 """Find the shortest unambiguous prefix that matches hexnode.""" 447 """Find the shortest unambiguous prefix that matches hexnode."""
448 # _partialmatch() of filtered changelog could take O(len(repo)) time, 448 # _partialmatch() of filtered changelog could take O(len(repo)) time,
449 # which would be unacceptably slow. so we look for hash collision in 449 # which would be unacceptably slow. so we look for hash collision in
450 # unfiltered space, which means some hashes may be slightly longer. 450 # unfiltered space, which means some hashes may be slightly longer.
451 return repo.unfiltered().changelog.shortest(hexnode, minlength) 451 return repo.unfiltered().changelog.shortest(hex(node), minlength)
452 452
453 def isrevsymbol(repo, symbol): 453 def isrevsymbol(repo, symbol):
454 """Checks if a symbol exists in the repo. 454 """Checks if a symbol exists in the repo.
455 455
456 See revsymbol() for details. Raises error.LookupError if the symbol is an 456 See revsymbol() for details. Raises error.LookupError if the symbol is an