Mercurial > hg
changeset 20371:6f3fb6a974e0
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.
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 05 Feb 2014 20:22:28 -0800 |
parents | aa51392da507 |
children | 45562379ce4e |
files | mercurial/templater.py |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templater.py Fri Jan 17 00:16:48 2014 -0800 +++ b/mercurial/templater.py Wed Feb 05 20:22:28 2014 -0800 @@ -368,7 +368,14 @@ 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