Mercurial > public > mercurial-scm > hg-stable
diff 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 |
line wrap: on
line diff
--- a/mercurial/scmutil.py Fri Apr 13 10:36:03 2018 -0700 +++ b/mercurial/scmutil.py Sat Apr 14 00:13:08 2018 -0700 @@ -443,12 +443,12 @@ repo.changelog.rev(node) # make sure node isn't filtered return node -def shortesthexnodeidprefix(repo, hexnode, minlength=1): +def shortesthexnodeidprefix(repo, node, minlength=1): """Find the shortest unambiguous prefix that matches hexnode.""" # _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) + return repo.unfiltered().changelog.shortest(hex(node), minlength) def isrevsymbol(repo, symbol): """Checks if a symbol exists in the repo.