mercurial/exchange.py
changeset 25501 a99fee62611d
parent 25485 8182163ae983
child 25502 bd41c19383db
--- a/mercurial/exchange.py	Mon Jun 08 16:55:21 2015 -0700
+++ b/mercurial/exchange.py	Wed May 27 22:25:33 2015 -0700
@@ -569,8 +569,17 @@
     pushop.stepsdone.add('bookmarks')
     part2book = []
     enc = pushkey.encode
+
+    def handlefailure(pushop, exc):
+        targetid = int(exc.partid)
+        for partid, book, action in part2book:
+            if partid == targetid:
+                raise error.Abort(bookmsgmap[action][1].rstrip() % book)
+        # we should not be called for part we did not generated
+        assert False
+
     for book, old, new in pushop.outbookmarks:
-        part = bundler.newpart('pushkey', mandatory=False)
+        part = bundler.newpart('pushkey')
         part.addparam('namespace', enc('bookmarks'))
         part.addparam('key', enc(book))
         part.addparam('old', enc(old))
@@ -581,7 +590,7 @@
         elif not new:
             action = 'delete'
         part2book.append((part.id, book, action))
-
+        pushop.pkfailcb[part.id] = handlefailure
 
     def handlereply(op):
         ui = pushop.ui