Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/scmutil.py @ 38894:7848f284b211
revisions: allow "x123" to refer to nodeid prefix "123"
When resolving "123" to a revision, we try to interpret it as revnum
before we try to interpret it as a nodeid hex prefix. This can lead to
the shortest valid prefix being longer than necessary. This patch lets
us write such nodeids in a shorter form by prefixing them with "x"
instead of adding more hex digits until they're longer than the
longest decimal revnum.
On my hg repo with almost 69k revisions, turning this feature on saves
on average 0.4% on the average nodeid length. That clearly doesn't
justify this patch. However, it becomes more usefule when combined
with the earlier patches in this series that let you disambiguate
nodeid prefixes within a configured revset.
Note that we attempt to resolve symbols as nodeid prefixes after we've
exhausted all other posibilities, so this is a backwards compatible
change (only queries that would previously fail may now succeed).
I've still hidden this feature behind an experiemntal config option so
we can roll it back if needed.
Differential Revision: https://phab.mercurial-scm.org/D4041
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Sun, 29 Apr 2018 10:07:40 -0700 |
parents | 531b86cc8fb3 |
children | a01200b25da6 |
comparison
equal
deleted
inserted
replaced
38893:531b86cc8fb3 | 38894:7848f284b211 |
---|---|
435 else: | 435 else: |
436 hexfunc = short | 436 hexfunc = short |
437 return '%d:%s' % (rev, hexfunc(node)) | 437 return '%d:%s' % (rev, hexfunc(node)) |
438 | 438 |
439 def resolvehexnodeidprefix(repo, prefix): | 439 def resolvehexnodeidprefix(repo, prefix): |
440 if (prefix.startswith('x') and | |
441 repo.ui.configbool('experimental', 'revisions.prefixhexnode')): | |
442 prefix = prefix[1:] | |
440 try: | 443 try: |
441 # Uses unfiltered repo because it's faster when prefix is ambiguous/ | 444 # Uses unfiltered repo because it's faster when prefix is ambiguous/ |
442 # This matches the shortesthexnodeidprefix() function below. | 445 # This matches the shortesthexnodeidprefix() function below. |
443 node = repo.unfiltered().changelog._partialmatch(prefix) | 446 node = repo.unfiltered().changelog._partialmatch(prefix) |
444 except error.AmbiguousPrefixLookupError: | 447 except error.AmbiguousPrefixLookupError: |