diff mercurial/exchange.py @ 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 dab31290c7eb
children 71083b020b4a
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')