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