# HG changeset patch # User Matt Mackall # Date 2015-10-21 21:21:27 # Node ID ba7eeeac9603077c6759235078297e63ae92078b # Parent c7d30fdb13b229537269030c94c7b2540b6d34a0 bookmarks: don't allow pushing new head for existing mark with -B (issue4400) diff --git a/mercurial/discovery.py b/mercurial/discovery.py --- a/mercurial/discovery.py +++ b/mercurial/discovery.py @@ -279,7 +279,7 @@ def checkheads(repo, remote, outgoing, r if bookmarks.validdest(repo, rctx, lctx): bookmarkedheads.add(lctx.node()) else: - if bm in newbookmarks: + if bm in newbookmarks and bm not in remotebookmarks: bookmarkedheads.add(repo[bm].node()) # 3. Check for new heads. diff --git a/tests/test-bookmarks-pushpull.t b/tests/test-bookmarks-pushpull.t --- a/tests/test-bookmarks-pushpull.t +++ b/tests/test-bookmarks-pushpull.t @@ -678,6 +678,26 @@ pushing a new bookmark on a new head doe $ hg -R ../b id -r W cc978a373a53 tip W +pushing an existing but divergent bookmark with -B still requires -f + + $ hg clone -q . r + $ hg up -q X + $ echo 1 > f2 + $ hg ci -qAml + + $ cd r + $ hg up -q X + $ echo 2 > f2 + $ hg ci -qAmr + $ hg push -B X + pushing to $TESTTMP/addmarks (glob) + searching for changes + remote has heads on branch 'default' that are not known locally: a2a606d9ff1b + abort: push creates new remote head 54694f811df9 with bookmark 'X'! + (pull and merge or see "hg help push" for details about pushing new heads) + [255] + $ cd .. + Check summary output for incoming/outgoing bookmarks $ hg bookmarks -d X