Mercurial > hg > evolve
changeset 1633:50e683d9835e
directaccess: fix case of shortened hash containing only digits
For directaccess, there are four cases for what looks like short hashes made
of digits only:
1 | the hash is a revision number and not a short hash for another revision:
we don't change the visibility
2 | the hash is a revision number and a short hash for another revision:
we don't change the visibility
3 | the hash is not a revision number and not a short hash for another revision:
we don't change the visibility
4 | the hash is not a revision number but is a short hash for another revision:
we make it visible
Before the patch we were not lifting visibility in case number 4. This patch
fixes the issue.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Wed, 18 Nov 2015 13:47:26 -0800 |
parents | 9afe9e0191a1 |
children | ef5da2310398 |
files | hgext/directaccess.py tests/test-inhibit.t |
diffstat | 2 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/directaccess.py +++ b/hgext/directaccess.py @@ -131,7 +131,7 @@ _listtuple = ('symbol', '_list') -def gethashsymbols(tree): +def gethashsymbols(tree, maxrev): # Returns the list of symbols of the tree that look like hashes # for example for the revset 3::abe3ff it will return ('abe3ff') if not tree: @@ -139,8 +139,12 @@ if len(tree) == 2 and tree[0] == "symbol": try: - int(tree[1]) - return [] + n = int(tree[1]) + # This isn't necessarily a rev number, could be a hash prefix + if n > maxrev: + return [tree[1]] + else: + return [] except ValueError as e: if hashre.match(tree[1]): return [tree[1]] @@ -155,7 +159,7 @@ elif len(tree) >= 3: results = [] for subtree in tree[1:]: - results += gethashsymbols(subtree) + results += gethashsymbols(subtree, maxrev) return results else: return [] @@ -171,8 +175,8 @@ if filternm is not None and filternm.startswith('visible-directaccess'): prelength = len(repo._explicitaccess) accessbefore = set(repo._explicitaccess) - repo.symbols = gethashsymbols(tree) cl = repo.unfiltered().changelog + repo.symbols = gethashsymbols(tree, len(cl)) for node in repo.symbols: try: node = cl._partialmatch(node)
--- a/tests/test-inhibit.t +++ b/tests/test-inhibit.t @@ -525,8 +525,14 @@ |/ o 14:d66ccb8c5871 add cL | - $ hg strip -r 104eed5354c7 - 1 changesets pruned + $ hg strip -r 210589181b14 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + working directory now at d66ccb8c5871 + 2 changesets pruned + +Using a hash prefix solely made of digits should work + $ hg update 210589181 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg rebase -d 18 -r 16 --keep rebasing 16:a438c045eb37 "add cN" $ hg log -r 14:: -G