Mercurial > hg
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()