mirror of
https://github.com/facebook/sapling.git
synced 2025-01-07 22:21:40 +03:00
revlog: handle hidden revs in _partialmatch (issue3979)
Looking up hidden prefixes could cause a no node exception Looking up unique non-hidden prefixes could be ambiguous
This commit is contained in:
parent
704604439e
commit
06155d5c8a
@ -751,10 +751,14 @@ class revlog(object):
|
||||
|
||||
def _partialmatch(self, id):
|
||||
try:
|
||||
return self.index.partialmatch(id)
|
||||
n = self.index.partialmatch(id)
|
||||
if n and self.hasnode(n):
|
||||
return n
|
||||
return None
|
||||
except RevlogError:
|
||||
# parsers.c radix tree lookup gave multiple matches
|
||||
raise LookupError(id, self.indexfile, _("ambiguous identifier"))
|
||||
# fall through to slow path that filters hidden revisions
|
||||
pass
|
||||
except (AttributeError, ValueError):
|
||||
# we are pure python, or key was too short to search radix tree
|
||||
pass
|
||||
@ -768,7 +772,8 @@ class revlog(object):
|
||||
l = len(id) // 2 # grab an even number of digits
|
||||
prefix = bin(id[:l * 2])
|
||||
nl = [e[7] for e in self.index if e[7].startswith(prefix)]
|
||||
nl = [n for n in nl if hex(n).startswith(id)]
|
||||
nl = [n for n in nl if hex(n).startswith(id) and
|
||||
self.hasnode(n)]
|
||||
if len(nl) > 0:
|
||||
if len(nl) == 1:
|
||||
self._pcache[id] = nl[0]
|
||||
|
@ -1223,6 +1223,9 @@ enable obsolete to test hidden feature
|
||||
$ hg log --template='{rev}:{node}\n' --hidden
|
||||
1:a765632148dc55d38c35c4f247c618701886cb2f
|
||||
0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
|
||||
$ hg log -r a
|
||||
abort: unknown revision 'a'!
|
||||
[255]
|
||||
|
||||
test that parent prevent a changeset to be hidden
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user