[PATCH 7 of 9] bundle2-push: introduce a list of part generating functions
pierre-yves.david at ens-lyon.org
pierre-yves.david at ens-lyon.org
Mon Jul 7 06:02:05 CDT 2014
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1404307564 -7200
# Wed Jul 02 15:26:04 2014 +0200
# Node ID c633162a96e155faf17a49d5c334a3fdf536027f
# Parent 344c10f0668ffb06c78ee8125c40cd5159a7a536
bundle2-push: introduce a list of part generating functions
Instead of explicitly calling a few function to generate part in the bundle, we
now have a list of all part generators. This should make it easier for
extensions to adds new part in the bundle.
This new way to extend the push deprecates the old `_pushbundle2extraparts` way.
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -225,23 +225,28 @@ def _pushb2ctx(pushop, bundler):
cgreplies = op.records.getreplies(cgpart.id)
assert len(cgreplies['changegroup']) == 1
pushop.ret = cgreplies['changegroup'][0]['return']
return handlereply
+# list of function that may decide to add parts to an outgoing bundle2
+bundle2partsgenerators = [_pushb2ctx]
+
def _pushbundle2(pushop):
"""push data to the remote using bundle2
The only currently supported type of data is changegroup but this will
evolve in the future."""
bundler = bundle2.bundle20(pushop.ui, bundle2.bundle2caps(pushop.remote))
# create reply capability
capsblob = bundle2.encodecaps(pushop.repo.bundle2caps)
bundler.newpart('b2x:replycaps', data=capsblob)
extrainfo = _pushbundle2extraparts(pushop, bundler)
- # add the changegroup bundle
- cgreplyhandler = _pushb2ctx(pushop, bundler)
- # do not push if no other parts than the capability
+ replyhandlers = []
+ for partgen in bundle2partsgenerators:
+ ret = partgen(pushop, bundler)
+ replyhandlers.append(ret)
+ # do not push if nothing to push
if bundler.nbparts <= 1:
return
stream = util.chunkbuffer(bundler.getchunks())
try:
reply = pushop.remote.unbundle(stream, ['force'], 'push')
@@ -249,11 +254,12 @@ def _pushbundle2(pushop):
raise util.Abort('missing support for %s' % exc)
try:
op = bundle2.processbundle(pushop.repo, reply)
except error.BundleValueError, exc:
raise util.Abort('missing support for %s' % exc)
- cgreplyhandler(op)
+ for rephand in replyhandlers:
+ rephand(op)
_pushbundle2extrareply(pushop, op, extrainfo)
def _pushbundle2extraparts(pushop, bundler):
"""hook function to let extensions add parts
More information about the Mercurial-devel
mailing list