[PATCH] bookmark: add an --active flag to display the active bookmark

Boris Feld boris.feld at octobus.net
Fri Aug 17 16:25:23 UTC 2018


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1534432767 -7200
#      Thu Aug 16 17:19:27 2018 +0200
# Node ID 743d3dfd61a275c393a19121de3cc24e70555c5c
# Parent  46da52f4b820f2668b120fcf93f09fb730065da6
# EXP-Topic active-bookmark
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 743d3dfd61a2
bookmark: add an --active flag to display the active bookmark

There is currently no official simple way to retrieve the current bookmark. In
particular for automation.

We add a `--active` flag to the `hg bookmarks` command. When set, the command
display the current bookmark name if any or return 1.

For now, this flag is read-only. However sensible combinations exist with
`--delete`, `--rename` and `--rev` and can be implemented later.

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -901,6 +901,7 @@ def bisect(ui, repo, rev=None, extra=Non
     ('d', 'delete', False, _('delete a given bookmark')),
     ('m', 'rename', '', _('rename a given bookmark'), _('OLD')),
     ('i', 'inactive', False, _('mark a bookmark inactive')),
+    ('', 'active', False, _('display the active bookmark')),
     ] + formatteropts,
     _('hg bookmarks [OPTIONS]... [NAME]...'))
 def bookmark(ui, repo, *names, **opts):
@@ -927,6 +928,10 @@ def bookmark(ui, repo, *names, **opts):
     A bookmark named '@' has the special property that :hg:`clone` will
     check it out by default if it exists.
 
+    The '--active' flag will display the current bookmark or return non-zero,
+    if combined with other action, they will be performed on the active
+    bookmark.
+
     .. container:: verbose
 
       Examples:
@@ -956,6 +961,7 @@ def bookmark(ui, repo, *names, **opts):
     delete = opts.get(r'delete')
     rename = opts.get(r'rename')
     inactive = opts.get(r'inactive')
+    active = opts.get(r'active')
 
     if delete and rename:
         raise error.Abort(_("--delete and --rename are incompatible"))
@@ -963,6 +969,16 @@ def bookmark(ui, repo, *names, **opts):
         raise error.Abort(_("--rev is incompatible with --delete"))
     if rename and rev:
         raise error.Abort(_("--rev is incompatible with --rename"))
+    if delete and active:
+        raise error.Abort(_("--delete is incompatible with --active"))
+    if rev and active:
+        raise error.Abort(_("--rev is incompatible with --active"))
+    if rename and active:
+        raise error.Abort(_("--rename is incompatible with --active"))
+    if names and active:
+        raise error.Abort(_("NAMES is incompatible with --active"))
+    if inactive and active:
+        raise error.Abort(_("--delete is incompatible with --active"))
     if not names and (delete or rev):
         raise error.Abort(_("bookmark name required"))
 
@@ -987,6 +1003,11 @@ def bookmark(ui, repo, *names, **opts):
                     ui.status(_("no active bookmark\n"))
                 else:
                     bookmarks.deactivate(repo)
+    elif active:
+        book = repo._activebookmark
+        if book is None:
+            return 1
+        ui.write("%s\n" % book, label=bookmarks.activebookmarklabel)
     else: # show bookmarks
         bookmarks.printbookmarks(ui, repo, **opts)
 
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
@@ -222,3 +222,26 @@ test that updating to closed branch head
      Z                         0:719295282060
   $ hg parents -q
   4:8fa964221e8e
+
+Checks command to retrieve active bookmark
+------------------------------------------
+
+display how "{activebookmark}" template is unsuitable for the task
+
+  $ hg book -T '- {activebookmark}\n'
+  - 
+  - Y
+  - 
+
+  $ hg book -r . W
+  $ hg book -T '- {activebookmark}\n'
+  - Y
+  - 
+  - Y
+  - 
+
+  $ hg bookmarks --active
+  Y
+  $ hg bookmarks --inactive
+  $ hg bookmarks --active
+  [1]
diff --git a/tests/test-completion.t b/tests/test-completion.t
--- a/tests/test-completion.t
+++ b/tests/test-completion.t
@@ -249,7 +249,7 @@ Show all commands + options
   archive: no-decode, prefix, rev, type, subrepos, include, exclude
   backout: merge, commit, no-commit, parent, rev, edit, tool, include, exclude, message, logfile, date, user
   bisect: reset, good, bad, skip, extend, command, noupdate
-  bookmarks: force, rev, delete, rename, inactive, template
+  bookmarks: force, rev, delete, rename, inactive, active, template
   branch: force, clean, rev
   branches: active, closed, template
   bundle: force, rev, branch, base, all, type, ssh, remotecmd, insecure


More information about the Mercurial-devel mailing list