hgweb: use compression engine API for zlib compression
More low-level compression code elimination because we now have nice
APIs.
This patch also demonstrates why we needed and implemented the
"level" option on the "compressstream" API.
--- a/mercurial/hgweb/protocol.py Mon Nov 07 18:46:37 2016 -0800
+++ b/mercurial/hgweb/protocol.py Mon Nov 07 18:54:35 2016 -0800
@@ -88,14 +88,8 @@
# Don't allow untrusted settings because disabling compression or
# setting a very high compression level could lead to flooding
# the server's network or CPU.
- z = zlib.compressobj(self.ui.configint('server', 'zliblevel', -1))
- for chunk in chunks:
- data = z.compress(chunk)
- # Not all calls to compress() emit data. It is cheaper to inspect
- # that here than to send it via the generator.
- if data:
- yield data
- yield z.flush()
+ opts = {'level': self.ui.configint('server', 'zliblevel', -1)}
+ return util.compengines['zlib'].compressstream(chunks, opts)
def _client(self):
return 'remote:%s:%s:%s' % (