[PATCH] bookmarks: allow to create/move bookmark without making it current (issue2788)

Kevin Bullock kbullock+mercurial at ringworld.org
Tue May 3 23:58:40 CDT 2011

# HG changeset patch
# User Kevin Bullock <kbullock at ringworld.org>
# Date 1292087335 -3600
# Node ID a75e92bcfe2581ddaaf9d00a8373f8fa722d2577
# Parent  bf951d58b9172e3dee1be36032784956e5775636
bookmarks: allow to create/move bookmark without making it current (issue2788)

Adds a -i/--inactive flag to the bookmarks command to create or move a
bookmark without making it the current one. This lets you use a bookmark
like a shareable, movable 'tag' and less like a 'branch'.

Thanks to Alexander Solovyov <alexander at solovyov.net> for most of the
work of implementation, and Matt Mackall <mpm at selenic.com> for
suggesting the option name.

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -483,7 +483,8 @@
             return hg.clean(repo, node)
-def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
+def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False,
+             rename=None, inactive=False):
     '''track a line of development with movable markers
     Bookmarks are pointers to certain commits that move when
@@ -514,7 +515,7 @@
         if mark is None:
             raise util.Abort(_("new bookmark name required"))
         marks[mark] = marks[rename]
-        if repo._bookmarkcurrent == rename:
+        if repo._bookmarkcurrent == rename and not inactive:
             bookmarks.setcurrent(repo, mark)
         del marks[rename]
@@ -549,7 +550,7 @@
             marks[mark] = repo.lookup(rev)
             marks[mark] = repo.changectx('.').node()
-        if repo.changectx('.').node() == marks[mark]:
+        if not inactive and repo.changectx('.').node() == marks[mark]:
             bookmarks.setcurrent(repo, mark)
@@ -4469,8 +4470,9 @@
          [('f', 'force', False, _('force')),
           ('r', 'rev', '', _('revision'), _('REV')),
           ('d', 'delete', False, _('delete a given bookmark')),
-          ('m', 'rename', '', _('rename a given bookmark'), _('NAME'))],
-         _('hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]')),
+          ('m', 'rename', '', _('rename a given bookmark'), _('NAME')),
+          ('i', 'inactive', False, _('do not mark a new bookmark active'))],
+         _('hg bookmarks [-f] [-d] [-i] [-m NAME] [-r REV] [NAME]')),
          [('f', 'force', None,
diff --git a/tests/test-bookmarks-current.t b/tests/test-bookmarks-current.t
--- a/tests/test-bookmarks-current.t
+++ b/tests/test-bookmarks-current.t
@@ -99,3 +99,10 @@
   $ hg bookmark
    * Y                         0:719295282060
+set bookmark Z using -i
+  $ hg bookmark -r . -i Z
+  $ hg bookmarks
+   * Y                         0:719295282060
+     Z                         0:719295282060

More information about the Mercurial-devel mailing list