changeset 23376:2e65da5f80df stable

push: stop independent usage of bundle2 in syncphase (issue4454) The phase-syncing code was using bundle2 if the remote supported it. It was doing so without regard to bundle2 activation on the client. Moreover, the phase push is now properly included in the unified bundle2 push, so having extra code in syncphase should be useless. If the remote is bundle2-enabled, the phases should already be synced. The buggy verification code was leading to a crash when a 3.2 client was pushing to a 3.1 server. The real bundle2 path detected that their versions were incompatible, but the syncphase code failed to, sending an incompatible bundle2 to the server. We drop the useless and buggy code as a result. The "else" clause is de-indented in the process.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 19 Nov 2014 01:36:17 +0000
parents 5ccced6eab0b
children c00b156d6e76
files mercurial/exchange.py
diffstat 1 files changed, 9 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/exchange.py	Mon Nov 17 01:48:43 2014 +0100
+++ b/mercurial/exchange.py	Wed Nov 19 01:36:17 2014 +0000
@@ -666,51 +666,15 @@
 
         # filter heads already turned public by the push
         outdated = [c for c in outdated if c.node() not in pheads]
-        b2caps = bundle2.bundle2caps(pushop.remote)
-        if 'b2x:pushkey' in b2caps:
-            # server supports bundle2, let's do a batched push through it
-            #
-            # This will eventually be unified with the changesets bundle2 push
-            bundler = bundle2.bundle20(pushop.ui, b2caps)
-            capsblob = bundle2.encodecaps(bundle2.getrepocaps(pushop.repo))
-            bundler.newpart('b2x:replycaps', data=capsblob)
-            part2node = []
-            enc = pushkey.encode
-            for newremotehead in outdated:
-                part = bundler.newpart('b2x:pushkey')
-                part.addparam('namespace', enc('phases'))
-                part.addparam('key', enc(newremotehead.hex()))
-                part.addparam('old', enc(str(phases.draft)))
-                part.addparam('new', enc(str(phases.public)))
-                part2node.append((part.id, newremotehead))
-            stream = util.chunkbuffer(bundler.getchunks())
-            try:
-                reply = pushop.remote.unbundle(stream, ['force'], 'push')
-                op = bundle2.processbundle(pushop.repo, reply)
-            except error.BundleValueError, exc:
-                raise util.Abort('missing support for %s' % exc)
-            for partid, node in part2node:
-                partrep = op.records.getreplies(partid)
-                results = partrep['pushkey']
-                assert len(results) <= 1
-                msg = None
-                if not results:
-                    msg = _('server ignored update of %s to public!\n') % node
-                elif not int(results[0]['return']):
-                    msg = _('updating %s to public failed!\n') % node
-                if msg is not None:
-                    pushop.ui.warn(msg)
-
-        else:
-            # fallback to independant pushkey command
-            for newremotehead in outdated:
-                r = pushop.remote.pushkey('phases',
-                                          newremotehead.hex(),
-                                          str(phases.draft),
-                                          str(phases.public))
-                if not r:
-                    pushop.ui.warn(_('updating %s to public failed!\n')
-                                   % newremotehead)
+        # fallback to independent pushkey command
+        for newremotehead in outdated:
+            r = pushop.remote.pushkey('phases',
+                                      newremotehead.hex(),
+                                      str(phases.draft),
+                                      str(phases.public))
+            if not r:
+                pushop.ui.warn(_('updating %s to public failed!\n')
+                               % newremotehead)
 
 def _localphasemove(pushop, nodes, phase=phases.public):
     """move <nodes> to <phase> in the local source repo"""