changeset 28182:e4fe4e903e97

bookmarks: add 'hg push -B .' for pushing the active bookmark (issue4917)
author liscju <piotr.listkiewicz@gmail.com>
date Fri, 19 Feb 2016 22:28:09 +0100
parents f8efc8a3a991
children e07daee83029
files mercurial/bookmarks.py mercurial/commands.py mercurial/exchange.py tests/test-bookmarks-pushpull.t
diffstat 4 files changed, 33 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/bookmarks.py	Sat Feb 20 15:56:44 2016 -0800
+++ b/mercurial/bookmarks.py	Fri Feb 19 22:28:09 2016 +0100
@@ -182,6 +182,11 @@
             fp.write("%s %s\n" % (hex(node), encoding.fromlocal(name)))
         self._clean = True
 
+    def expandname(self, bname):
+        if bname == '.':
+            return self.active
+        return bname
+
 def _readactive(repo, marks):
     """
     Get the active bookmark. We can have an active bookmark that updates
--- a/mercurial/commands.py	Sat Feb 20 15:56:44 2016 -0800
+++ b/mercurial/commands.py	Fri Feb 19 22:28:09 2016 +0100
@@ -5708,7 +5708,8 @@
 
     If -B/--bookmark is used, the specified bookmarked revision, its
     ancestors, and the bookmark will be pushed to the remote
-    repository.
+    repository. Specifying ``.`` is equivalent to specifying the active
+    bookmark's name.
 
     Please see :hg:`help urls` for important details about ``ssh://``
     URLs. If DESTINATION is omitted, a default path will be used.
@@ -5720,6 +5721,7 @@
         ui.setconfig('bookmarks', 'pushing', opts['bookmark'], 'push')
         for b in opts['bookmark']:
             # translate -B options to -r so changesets get pushed
+            b = repo._bookmarks.expandname(b)
             if b in repo._bookmarks:
                 opts.setdefault('rev', []).append(b)
             else:
--- a/mercurial/exchange.py	Sat Feb 20 15:56:44 2016 -0800
+++ b/mercurial/exchange.py	Fri Feb 19 22:28:09 2016 +0100
@@ -576,7 +576,8 @@
         ancestors = repo.changelog.ancestors(revnums, inclusive=True)
     remotebookmark = remote.listkeys('bookmarks')
 
-    explicit = set(pushop.bookmarks)
+    explicit = set([repo._bookmarks.expandname(bookmark)
+                    for bookmark in pushop.bookmarks])
 
     comp = bookmod.compare(repo, repo._bookmarks, remotebookmark, srchex=hex)
     addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same = comp
--- a/tests/test-bookmarks-pushpull.t	Sat Feb 20 15:56:44 2016 -0800
+++ b/tests/test-bookmarks-pushpull.t	Fri Feb 19 22:28:09 2016 +0100
@@ -103,6 +103,29 @@
   deleting remote bookmark W
   [1]
 
+export the active bookmark
+
+  $ hg bookmark V
+  $ hg push -B . ../a
+  pushing to ../a
+  searching for changes
+  no changes found
+  exporting bookmark V
+  [1]
+
+delete the bookmark
+
+  $ hg book -d V
+  $ hg push -B V ../a
+  pushing to ../a
+  searching for changes
+  no changes found
+  deleting remote bookmark V
+  [1]
+  $ hg up foobar
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (activating bookmark foobar)
+
 push/pull name that doesn't exist
 
   $ hg push -B badname ../a