Mercurial > hg-stable
changeset 42143:29569f2db929
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
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Tue, 02 Apr 2019 19:48:31 +0200 |
parents | 5382d8f8530b |
children | 4a8d9ed86475 013de80bf90e |
files | mercurial/bundle2.py tests/test-pull-bundle.t |
diffstat | 2 files changed, 44 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundle2.py Wed Dec 27 22:05:20 2017 -0800 +++ b/mercurial/bundle2.py Tue Apr 02 19:48:31 2019 +0200 @@ -834,12 +834,21 @@ 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
--- a/tests/test-pull-bundle.t Wed Dec 27 22:05:20 2017 -0800 +++ b/tests/test-pull-bundle.t Tue Apr 02 19:48:31 2019 +0200 @@ -120,6 +120,38 @@ * 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