diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -1727,9 +1727,11 @@ Could be a bundle HG10 or a bundle HG20 depending on bundlecaps passed. - Returns an iterator over raw chunks (of varying sizes). + Returns a 2-tuple of a dict with metadata about the generated bundle + and an iterator over raw chunks (of varying sizes). """ kwargs = pycompat.byteskwargs(kwargs) + info = {} usebundle2 = bundle2requested(bundlecaps) # bundle10 case if not usebundle2: @@ -1740,10 +1742,12 @@ raise ValueError(_('unsupported getbundle arguments: %s') % ', '.join(sorted(kwargs.keys()))) outgoing = _computeoutgoing(repo, heads, common) - return changegroup.makestream(repo, outgoing, '01', source, - bundlecaps=bundlecaps) + info['bundleversion'] = 1 + return info, changegroup.makestream(repo, outgoing, '01', source, + bundlecaps=bundlecaps) # bundle20 case + info['bundleversion'] = 2 b2caps = {} for bcaps in bundlecaps: if bcaps.startswith('bundle2='): @@ -1759,7 +1763,7 @@ func(bundler, repo, source, bundlecaps=bundlecaps, b2caps=b2caps, **pycompat.strkwargs(kwargs)) - return bundler.getchunks() + return info, bundler.getchunks() @getbundle2partsgenerator('stream') def _getbundlestream(bundler, repo, source, bundlecaps=None, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -197,7 +197,7 @@ **kwargs): chunks = exchange.getbundlechunks(self._repo, source, heads=heads, common=common, bundlecaps=bundlecaps, - **kwargs) + **kwargs)[1] cb = util.chunkbuffer(chunks) if exchange.bundle2requested(bundlecaps): diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py --- a/mercurial/wireproto.py +++ b/mercurial/wireproto.py @@ -877,8 +877,8 @@ _('server has pull-based clones disabled'), hint=_('remove --pull if specified or upgrade Mercurial')) - chunks = exchange.getbundlechunks(repo, 'serve', - **pycompat.strkwargs(opts)) + info, chunks = exchange.getbundlechunks(repo, 'serve', + **pycompat.strkwargs(opts)) except error.Abort as exc: # cleanly forward Abort error to the client if not exchange.bundle2requested(opts.get('bundlecaps')):