bookmarks: fix check of hash-like name to not abort by ambiguous identifier
authorYuya Nishihara <yuya@tcha.org>
Thu, 25 May 2017 23:20:00 +0900
changeset 32482 579df5aaa425
parent 32481 a87dabb053d0
child 32483 f8fb8a441b4a
bookmarks: fix check of hash-like name to not abort by ambiguous identifier 'mark in repo' may raise LookupError. I set it to not be warned since bookmark names shorter than 4 chars aren't checked and short names are likely to be ambiguous.
mercurial/commands.py
tests/test-bookmarks.t
--- a/mercurial/commands.py	Thu May 25 23:18:02 2017 +0900
+++ b/mercurial/commands.py	Thu May 25 23:20:00 2017 +0900
@@ -968,11 +968,16 @@
             and not force):
             raise error.Abort(
                 _("a bookmark cannot have the name of an existing branch"))
-        if len(mark) > 3 and mark in repo and not force:
-            repo.ui.warn(
-                _("bookmark %s matches a changeset hash\n"
-                  "(did you leave a -r out of an 'hg bookmark' command?)\n") %
-                mark)
+        if len(mark) > 3 and not force:
+            try:
+                shadowhash = (mark in repo)
+            except error.LookupError: # ambiguous identifier
+                shadowhash = False
+            if shadowhash:
+                repo.ui.warn(
+                    _("bookmark %s matches a changeset hash\n"
+                      "(did you leave a -r out of an 'hg bookmark' command?)\n")
+                    % mark)
 
     if delete and rename:
         raise error.Abort(_("--delete and --rename are incompatible"))
--- a/tests/test-bookmarks.t	Thu May 25 23:18:02 2017 +0900
+++ b/tests/test-bookmarks.t	Thu May 25 23:20:00 2017 +0900
@@ -320,8 +320,36 @@
   $ hg bookmark -d 925d80f479bb
   $ hg bookmark -d db815d6d32e6
 
+  $ cd ..
+
+bookmark with a name that matches an ambiguous node id
+
+  $ hg init ambiguous
+  $ cd ambiguous
+  $ echo 0 > a
+  $ hg ci -qAm 0
+  $ for i in 1057 2857 4025; do
+  >   hg up -q 0
+  >   echo $i > a
+  >   hg ci -qm $i
+  > done
+  $ hg up -q null
+  $ hg log -r0: -T '{rev}:{node}\n'
+  0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a
+  1:c56256a09cd28e5764f32e8e2810d0f01e2e357a
+  2:c5623987d205cd6d9d8389bfc40fff9dbb670b48
+  3:c562ddd9c94164376c20b86b0b4991636a3bf84f
+
+  $ hg bookmark -r0 c562
+  $ hg bookmarks
+     c562                      0:b4e73ffab476
+
+  $ cd ..
+
 incompatible options
 
+  $ cd repo
+
   $ hg bookmark -m Y -d Z
   abort: --delete and --rename are incompatible
   [255]