# HG changeset patch # User Boris Feld # Date 2018-08-16 15:19:27 # Node ID 337443f09fc8e565f7063f5132109e9a2bc7fa96 # Parent b17d27ea61fb0105abb53e74ff0973ba93574bd6 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(_("--inactive 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