bookmarks: allow push -B to create a new remote head (
issue2372)
Push is currently allowed to create a new head if there is a remote
bookmark that will be updated to point to the new head. If the
bookmark is not known remotely then push aborts, even if a -B argument
is about to push the bookmark. This change allows push to continue in
this case. This does not require a wireproto force.
--- a/mercurial/commands.py Thu Nov 21 15:46:49 2013 -0500
+++ b/mercurial/commands.py Mon Nov 11 21:16:54 2013 +1100
@@ -4677,6 +4677,7 @@
"""
if opts.get('bookmark'):
+ ui.setconfig('bookmarks', 'pushing', opts['bookmark'])
for b in opts['bookmark']:
# translate -B options to -r so changesets get pushed
if b in repo._bookmarks:
--- a/mercurial/discovery.py Thu Nov 21 15:46:49 2013 -0500
+++ b/mercurial/discovery.py Mon Nov 11 21:16:54 2013 +1100
@@ -219,7 +219,8 @@
unsynced = inc and set([None]) or set()
return {None: (oldheads, newheads, unsynced)}
-def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False):
+def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False,
+ newbookmarks=[]):
"""Check that a push won't add any outgoing head
raise Abort error and display ui message as needed.
@@ -259,6 +260,9 @@
lctx, rctx = repo[bm], repo[rnode]
if bookmarks.validdest(repo, rctx, lctx):
bookmarkedheads.add(lctx.node())
+ else:
+ if bm in newbookmarks:
+ bookmarkedheads.add(repo[bm].node())
# 3. Check for new heads.
# If there are more heads after the push than before, a suitable
--- a/mercurial/localrepo.py Thu Nov 21 15:46:49 2013 -0500
+++ b/mercurial/localrepo.py Mon Nov 11 21:16:54 2013 +1100
@@ -1867,9 +1867,10 @@
raise util.Abort(_(mst)
% (ctx.troubles()[0],
ctx))
+ newbm = self.ui.configlist('bookmarks', 'pushing')
discovery.checkheads(unfi, remote, outgoing,
remoteheads, newbranch,
- bool(inc))
+ bool(inc), newbm)
# TODO: get bundlecaps from remote
bundlecaps = None
--- a/tests/test-bookmarks-pushpull.t Thu Nov 21 15:46:49 2013 -0500
+++ b/tests/test-bookmarks-pushpull.t Mon Nov 11 21:16:54 2013 +1100
@@ -424,4 +424,22 @@
remote: added 1 changesets with 1 changes to 1 files
exporting bookmark add-foo
+pushing a new bookmark on a new head does not require -f if -B is specified
+
+ $ hg up -q X
+ $ hg book W
+ $ echo c5 > f2
+ $ hg ci -Am5
+ created new head
+ $ hg push -B W
+ pushing to http://localhost:$HGPORT/
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files (+1 heads)
+ exporting bookmark W
+ $ hg -R ../b id -r W
+ cc978a373a53 tip W
+
$ cd ..