mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
template: fix shortest(node) function in pure mercurial
Pure mercurial (i.e. without c extensions) does not support partialmatch() on the revlog index, so we must fall back to use revlog._partialmatch() to handle that case for us. The tests caught this. We don't use revlog._partialmatch() for the normal case because it performs a very expensive index iteration when the string being tested fails to find a unique result via index.partialmatch(). It does this in order to filter out hidden revs in hopes of the string being unique amongst non-hidden revs. For the shortest(node) case, we'd prefer performance over worrying about hidden revs.
This commit is contained in:
parent
fe9653ca83
commit
41c61c62a7
@ -368,7 +368,14 @@ def shortest(context, mapping, args):
|
||||
cl = mapping['ctx']._repo.changelog
|
||||
def isvalid(test):
|
||||
try:
|
||||
cl.index.partialmatch(test)
|
||||
try:
|
||||
cl.index.partialmatch(test)
|
||||
except AttributeError:
|
||||
# Pure mercurial doesn't support partialmatch on the index.
|
||||
# Fallback to the slow way.
|
||||
if cl._partialmatch(test) is None:
|
||||
return False
|
||||
|
||||
try:
|
||||
int(test)
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user