Mercurial > public > mercurial-scm > hg-stable
diff mercurial/wireproto.py @ 24803:e89f909edffa stable 3.4-rc
merge default into stable for 3.4 freeze
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 16 Apr 2015 20:57:51 -0500 |
parents | 0c4d5e01b31f |
children | 631766d1f57a |
line wrap: on
line diff
--- a/mercurial/wireproto.py Thu Apr 16 22:33:53 2015 +0900 +++ b/mercurial/wireproto.py Thu Apr 16 20:57:51 2015 -0500 @@ -363,8 +363,10 @@ opts[key] = value f = self._callcompressable("getbundle", **opts) bundlecaps = kwargs.get('bundlecaps') - if bundlecaps is not None and 'HG2Y' in bundlecaps: - return bundle2.unbundle20(self.ui, f) + if bundlecaps is None: + bundlecaps = () # kwargs could have it to None + if util.any((cap.startswith('HG2') for cap in bundlecaps)): + return bundle2.getunbundler(self.ui, f) else: return changegroupmod.cg1unpacker(f, 'UN') @@ -401,7 +403,7 @@ else: # bundle2 push. Send a stream, fetch a stream. stream = self._calltwowaystream('unbundle', cg, heads=heads) - ret = bundle2.unbundle20(self.ui, stream) + ret = bundle2.getunbundler(self.ui, stream) return ret def debugwireargs(self, one, two, three=None, four=None, five=None): @@ -613,9 +615,9 @@ # otherwise, add 'streamreqs' detailing our local revlog format else: caps.append('streamreqs=%s' % ','.join(requiredformats)) - if repo.ui.configbool('experimental', 'bundle2-exp', False): + if repo.ui.configbool('experimental', 'bundle2-advertise', True): capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo)) - caps.append('bundle2-exp=' + urllib.quote(capsblob)) + caps.append('bundle2=' + urllib.quote(capsblob)) caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority)) caps.append('httpheader=1024') return caps @@ -839,35 +841,40 @@ finally: fp.close() os.unlink(tempname) - except error.BundleValueError, exc: - bundler = bundle2.bundle20(repo.ui) - errpart = bundler.newpart('b2x:error:unsupportedcontent') + + except (error.BundleValueError, util.Abort, error.PushRaced), exc: + # handle non-bundle2 case first + if not getattr(exc, 'duringunbundle2', False): + try: + raise + except util.Abort: + # The old code we moved used sys.stderr directly. + # We did not change it to minimise code change. + # This need to be moved to something proper. + # Feel free to do it. + sys.stderr.write("abort: %s\n" % exc) + return pushres(0) + except error.PushRaced: + return pusherr(str(exc)) + + bundler = bundle2.bundle20(repo.ui) + for out in getattr(exc, '_bundle2salvagedoutput', ()): + bundler.addpart(out) + try: + raise + except error.BundleValueError, exc: + errpart = bundler.newpart('error:unsupportedcontent') if exc.parttype is not None: errpart.addparam('parttype', exc.parttype) if exc.params: errpart.addparam('params', '\0'.join(exc.params)) - return streamres(bundler.getchunks()) - except util.Abort, inst: - # The old code we moved used sys.stderr directly. - # We did not change it to minimise code change. - # This need to be moved to something proper. - # Feel free to do it. - if getattr(inst, 'duringunbundle2', False): - bundler = bundle2.bundle20(repo.ui) - manargs = [('message', str(inst))] + except util.Abort, exc: + manargs = [('message', str(exc))] advargs = [] - if inst.hint is not None: - advargs.append(('hint', inst.hint)) - bundler.addpart(bundle2.bundlepart('b2x:error:abort', + if exc.hint is not None: + advargs.append(('hint', exc.hint)) + bundler.addpart(bundle2.bundlepart('error:abort', manargs, advargs)) - return streamres(bundler.getchunks()) - else: - sys.stderr.write("abort: %s\n" % inst) - return pushres(0) - except error.PushRaced, exc: - if getattr(exc, 'duringunbundle2', False): - bundler = bundle2.bundle20(repo.ui) - bundler.newpart('b2x:error:pushraced', [('message', str(exc))]) - return streamres(bundler.getchunks()) - else: - return pusherr(str(exc)) + except error.PushRaced, exc: + bundler.newpart('error:pushraced', [('message', str(exc))]) + return streamres(bundler.getchunks())