Mercurial > hg
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 |