# HG changeset patch # User Gregory Szorc # Date 1479609100 28800 # Node ID e16e234b9ca38646545558e672482c70d3d3e1d8 # Parent bc0def54c17d435df0524e3b8fc33ed8e13f097b httppeer: do decompression inside _callstream The current HTTP transport protocol only compresses certain command responses and requires calls to that command to call "_callcompressable," which zlib decompresses the response transparently. Upcoming changes will enable *any* response to be compressed with varying compression formats. In order to handle this better, this commit moves the decompression bits to the main function performing the HTTP request. We introduce an underscore-prefixed argument to denote this behavior so it doesn't conflict with a named argument to a command. diff -r bc0def54c17d -r e16e234b9ca3 mercurial/httppeer.py --- a/mercurial/httppeer.py Sat Nov 19 17:11:12 2016 -0800 +++ b/mercurial/httppeer.py Sat Nov 19 18:31:40 2016 -0800 @@ -90,7 +90,7 @@ def lock(self): raise error.Abort(_('operation not supported over http')) - def _callstream(self, cmd, **args): + def _callstream(self, cmd, _compressible=False, **args): if cmd == 'pushkey': args['data'] = '' data = args.pop('data', None) @@ -201,6 +201,9 @@ raise error.RepoError(_("'%s' uses newer protocol %s") % (safeurl, version)) + if _compressible: + return util.chunkbuffer(zgenerator(resp)) + return resp def _call(self, cmd, **args): @@ -271,8 +274,7 @@ os.unlink(filename) def _callcompressable(self, cmd, **args): - stream = self._callstream(cmd, **args) - return util.chunkbuffer(zgenerator(stream)) + return self._callstream(cmd, _compressible=True, **args) def _abort(self, exception): raise exception