Mercurial > hg
changeset 21989:bdb6d97f0a04
getbundle: add a ``cg`` boolean argument to control changegroup inclusion
The ``getbundle`` function was initially design to return a changegroup bundle.
However, bundle2 allows transmitting a wide range of data. Some bundle2
requests may not include a changegroup at all.
Before this changeset, the client would request a changegroup for
``heads=[nullid]`` and receive an empty changegroup.
We introduce an official boolean parameter, ``cg``, that can be set
to false to disable changegroup generation on getbundle. A new bundle2
capability is introduced to let the client know.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sat, 31 May 2014 16:48:29 -0700 |
parents | 12cd3827b860 |
children | 6be1e1dbe6a0 |
files | mercurial/exchange.py mercurial/localrepo.py mercurial/wireproto.py |
diffstat | 3 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/exchange.py Thu May 22 17:20:52 2014 -0700 +++ b/mercurial/exchange.py Sat May 31 16:48:29 2014 -0700 @@ -726,9 +726,13 @@ The implementation is at a very early stage and will get massive rework when the API of bundle is refined. """ - # build changegroup bundle here. - cg = changegroup.getbundle(repo, source, heads=heads, - common=common, bundlecaps=bundlecaps) + cg = None + if kwargs.get('cg', True): + # build changegroup bundle here. + cg = changegroup.getbundle(repo, source, heads=heads, + common=common, bundlecaps=bundlecaps) + elif 'HG2X' not in bundlecaps: + raise ValueError(_('request for bundle10 must include changegroup')) if bundlecaps is None or 'HG2X' not in bundlecaps: if kwargs: raise ValueError(_('unsupported getbundle arguments: %s')
--- a/mercurial/localrepo.py Thu May 22 17:20:52 2014 -0700 +++ b/mercurial/localrepo.py Sat May 31 16:48:29 2014 -0700 @@ -182,7 +182,9 @@ bundle2caps = {'HG2X': (), 'b2x:listkeys': (), - 'b2x:pushkey': ()} + 'b2x:pushkey': (), + 'b2x:changegroup': (), + } # a list of (ui, featureset) functions. # only functions defined in module of enabled extensions are invoked