Mercurial > hg
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"""