# HG changeset patch # User Joerg Sonnenberger # Date 2019-04-02 17:48:31 # Node ID 29569f2db9293fca58c5e34fe15f4833aeb40ed0 # Parent 5382d8f8530b65ef9527596ddf6a0a24b6fd2fc6 bundle2: handle compression in _forwardchunks _forwardchunks is used to compensate for getbundle protocol deficits. Since it transparently decodes the payload, it also needs to remove the corresponding compression parameter in case the server decides to send one. This the wire protocol part of issue 5990. Differential Revision: https://phab.mercurial-scm.org/D6182 diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py --- a/mercurial/bundle2.py +++ b/mercurial/bundle2.py @@ -834,12 +834,21 @@ class unbundle20(unpackermixin): if paramssize < 0: raise error.BundleValueError('negative bundle param size: %i' % paramssize) - yield _pack(_fstreamparamsize, paramssize) if paramssize: params = self._readexact(paramssize) self._processallparams(params) - yield params - assert self._compengine.bundletype()[1] == 'UN' + # The payload itself is decompressed below, so drop + # the compression parameter passed down to compensate. + outparams = [] + for p in params.split(' '): + k, v = p.split('=', 1) + if k.lower() != 'compression': + outparams.append(p) + outparams = ' '.join(outparams) + yield _pack(_fstreamparamsize, len(outparams)) + yield outparams + else: + yield _pack(_fstreamparamsize, paramssize) # From there, payload might need to be decompressed self._fp = self._compengine.decompressorreader(self._fp) emptycount = 0 diff --git a/tests/test-pull-bundle.t b/tests/test-pull-bundle.t --- a/tests/test-pull-bundle.t +++ b/tests/test-pull-bundle.t @@ -120,6 +120,38 @@ Test pullbundle functionality for increm * sending pullbundle "1.hg" (glob) $ rm repo/.hg/blackbox.log +Test pullbundle functionality for incoming + + $ cd repo + $ hg --config blackbox.track=debug --debug serve -p $HGPORT2 -d --pid-file=../repo.pid + listening at http://*:$HGPORT2/ (bound to $LOCALIP:$HGPORT2) (glob) (?) + $ cat ../repo.pid >> $DAEMON_PIDS + $ cd .. + $ hg clone http://localhost:$HGPORT2/ repo.pullbundle2a -r 0 + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + new changesets bbd179dfa0a7 (1 drafts) + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd repo.pullbundle2a + $ hg incoming -r ed1b79f46b9a + comparing with http://localhost:$HGPORT2/ + searching for changes + changeset: 1:ed1b79f46b9a + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: change foo + + $ cd .. + $ killdaemons.py + $ grep 'sending pullbundle ' repo/.hg/blackbox.log + * sending pullbundle "0.hg" (glob) + * sending pullbundle "1.hg" (glob) + $ rm repo/.hg/blackbox.log + Test recovery from misconfigured server sending no new data $ cd repo