changeset 30177:9626022feaa4

bundle2: only emit compressed chunks if they have data This is similar to 58467204cac0. Not all calls into the compressor return compressed data, as the compressor may buffer compressed output internally. It is cheaper to check for empty chunks than to send empty chunks through the generator. When generating a gzip-v2 bundle of the mozilla-unified repo, this change results in 50,093 empty chunks not being sent through the generator (out of 1,902,996 total input chunks).
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 15 Oct 2016 17:10:53 -0700
parents 9f41b66cffc0
children d61c42c1a35c
files mercurial/bundle2.py
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/bundle2.py	Sat Oct 15 15:01:14 2016 -0700
+++ b/mercurial/bundle2.py	Sat Oct 15 17:10:53 2016 -0700
@@ -573,7 +573,9 @@
             yield param
         # starting compression
         for chunk in self._getcorechunk():
-            yield self._compressor.compress(chunk)
+            data = self._compressor.compress(chunk)
+            if data:
+                yield data
         yield self._compressor.flush()
 
     def _paramchunk(self):
@@ -1324,7 +1326,9 @@
         def chunkiter():
             yield header
             for chunk in subchunkiter:
-                yield z.compress(chunk)
+                data = z.compress(chunk)
+                if data:
+                    yield data
             yield z.flush()
         chunkiter = chunkiter()