Mercurial > hg
changeset 24904:b5c227f3e461 stable
revset: id() called with 40-byte strings should give the same results as for short strings
The patch solves two issues:
1. id(unknown_full_hash) aborts, but id(unknown_short_hash) doesn't
2. id(40byte_tag_or_bookmark) returns tagged/bookmarked revision,
but id(non-40byte_tag_or_bookmark) doesn't
After the patch:
1. id(unknown_full_hash) doesn't abort
2. id(40byte_tag_or_bookmark) returns empty set
author | Alexander Drozdov <al.drozdov@gmail.com> |
---|---|
date | Mon, 20 Apr 2015 10:52:20 +0300 |
parents | 09124cce913f |
children | a4ee6f774f14 |
files | mercurial/revset.py tests/test-revset.t |
diffstat | 2 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Sun May 03 17:33:14 2015 +0900 +++ b/mercurial/revset.py Mon Apr 20 10:52:20 2015 +0300 @@ -1294,7 +1294,10 @@ # i18n: "id" is a keyword n = getstring(l[0], _("id requires a string")) if len(n) == 40: - rn = repo[n].rev() + try: + rn = repo.changelog.rev(node.bin(n)) + except (LookupError, TypeError): + rn = None else: rn = None pm = repo.changelog._partialmatch(n)
--- a/tests/test-revset.t Sun May 03 17:33:14 2015 +0900 +++ b/tests/test-revset.t Mon Apr 20 10:52:20 2015 +0300 @@ -87,6 +87,7 @@ $ hg ci -Aqm9 $ hg tag -r6 1.0 + $ hg bookmark -r6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $ hg clone --quiet -U -r 7 . ../remote1 $ hg clone --quiet -U -r 8 . ../remote2 @@ -554,6 +555,23 @@ hg: parse error: rev expects a number [255] +Test hexadecimal revision + $ log 'id(2)' + abort: 00changelog.i@2: ambiguous identifier! + [255] + $ log 'id(23268)' + 4 + $ log 'id(2785f51eece)' + 0 + $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532c)' + 8 + $ log 'id(d5d0dcbdc4a)' + $ log 'id(d5d0dcbdc4w)' + $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532d)' + $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532q)' + $ log 'id(1.0)' + $ log 'id(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)' + Test null revision $ log '(null)' -1