bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218)
authorYuya Nishihara <yuya@tcha.org>
Sat, 09 Nov 2019 12:55:56 +0900
changeset 43601 a80d5ddecc2d
parent 43600 fe2e0d100187
child 43602 889ac87e8bfd
bookmarks: accept explicit -r 'wdir()' when adding new bookmarks (issue6218) Even though the bookmark semantics can't be fully encoded to the virtual working changeset idea, the active bookmark can be considered a bookmark of the working revision. Before, 'tgt' was None, and changes=[(bm, None)] means deleting a bookmark named 'bm'.
mercurial/bookmarks.py
tests/test-bookmarks.t
--- a/mercurial/bookmarks.py	Sat Nov 09 12:44:00 2019 +0900
+++ b/mercurial/bookmarks.py	Sat Nov 09 12:55:56 2019 +0900
@@ -958,8 +958,13 @@
     if rev:
         repo = scmutil.unhidehashlikerevs(repo, [rev], b'nowarn')
 
-    ctx = scmutil.revsingle(repo, rev)
+    ctx = scmutil.revsingle(repo, rev, None)
+    # bookmarking wdir means creating a bookmark on p1 and activating it
+    activatenew = not inactive and ctx.rev() is None
+    if ctx.node() is None:
+        ctx = ctx.p1()
     tgt = ctx.node()
+    assert tgt
 
     for mark in names:
         mark = checkformat(repo, mark)
@@ -984,7 +989,7 @@
             repo.ui.warn(b"(%s)\n" % msg)
 
     marks.applychanges(repo, tr, changes)
-    if not inactive and cur == marks[newact] and not rev:
+    if activatenew and cur == marks[newact]:
         activate(repo, newact)
     elif cur != tgt and newact == repo._activebookmark:
         deactivate(repo)
--- a/tests/test-bookmarks.t	Sat Nov 09 12:44:00 2019 +0900
+++ b/tests/test-bookmarks.t	Sat Nov 09 12:55:56 2019 +0900
@@ -619,6 +619,16 @@
      x  y                      2:db815d6d32e6
   $ hg bookmark Z
 
+bookmark wdir to activate it (issue6218)
+
+  $ hg bookmark -d Z
+  $ hg bookmark -r 'wdir()' Z
+  $ hg bookmark -l
+     X2                        1:925d80f479bb
+     Y                         2:db815d6d32e6
+   * Z                         2:db815d6d32e6
+     x  y                      2:db815d6d32e6
+
 test clone
 
   $ hg bookmark -r 2 -i @