diff mercurial/discovery.py @ 20184:a14d93b2fb1b

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.
author Stephen Lee <sphen.lee@gmail.com>
date Mon, 11 Nov 2013 21:16:54 +1100
parents b988b3b19303
children d2704c48f417
line wrap: on
line diff
--- 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