bookmarks: don't allow pushing new head for existing mark with -B (issue4400) stable
authorMatt Mackall <mpm@selenic.com>
Wed, 21 Oct 2015 16:21:27 -0500
branchstable
changeset 26819 ba7eeeac9603
parent 26818 c7d30fdb13b2
child 26820 71d5238f92e9
bookmarks: don't allow pushing new head for existing mark with -B (issue4400)
mercurial/discovery.py
tests/test-bookmarks-pushpull.t
--- a/mercurial/discovery.py	Tue Oct 20 18:46:00 2015 -0400
+++ b/mercurial/discovery.py	Wed Oct 21 16:21:27 2015 -0500
@@ -279,7 +279,7 @@
             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.
--- a/tests/test-bookmarks-pushpull.t	Tue Oct 20 18:46:00 2015 -0400
+++ b/tests/test-bookmarks-pushpull.t	Wed Oct 21 16:21:27 2015 -0500
@@ -678,6 +678,26 @@
   $ 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