[PATCH 11 of 11] util: remove compressorobj API from compression engines

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Nov 7 09:25:10 EST 2016



On 11/02/2016 01:08 AM, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1477160459 25200
> #      Sat Oct 22 11:20:59 2016 -0700
> # Node ID 4f491f7958229b370c5929d2e2599b9ed69d8254
> # Parent  fc426af4f25c3403703e913ccb4a6865865fcb02
> util: remove compressorobj API from compression engines
>
> It was quite low-level and there are no callers of it now that
> everyone is using compressstream()

Wait what ‽‽ plot twist!! You should probably mention upfront that 
eventually killing this method is one of your goal.

> diff --git a/mercurial/util.py b/mercurial/util.py
> --- a/mercurial/util.py
> +++ b/mercurial/util.py
> @@ -2884,22 +2884,16 @@ class compressormanager(object):
>
>          The passed compression engine is an object with attributes describing
>          behavior and methods performing well-defined actions. The following
>          attributes are recognized (all are optional):
>
>          * bundletype -- Attribute containing the identifier of this compression
>            format as used by bundles.
>
> -        * compressorobj -- Method returning an object with ``compress(data)``
> -          and ``flush()`` methods. This object and these methods are used to
> -          incrementally feed data (presumably uncompressed) chunks into a
> -          compressor. Calls to these methods return compressed bytes, which
> -          may be 0-length if there is no output for the operation.
> -
>          * compressstream -- Compress an iterator of chunks and return an
>            iterator of compressed chunks.
>
>            Optionally accepts an argument defining how to perform compression.
>            Each engine treats this argument differently.
>
>          * decompressorreader -- Method that is used to perform decompression
>            on a file object. Argument is an object with a ``read(size)`` method
> @@ -2928,19 +2922,16 @@ class compressormanager(object):
>
>  compressionengines = compressormanager()
>
>  class _zlibengine(object):
>      @property
>      def bundletype(self):
>          return 'GZ'
>
> -    def compressorobj(self):
> -        return zlib.compressobj()
> -
>      def compressstream(self, it, opts=None):
>          opts = opts or {}
>
>          z = zlib.compressobj(opts.get('level', -1))
>          for chunk in it:
>              data = z.compress(chunk)
>              # Not all calls to compress emit data. It is cheaper to inspect
>              # here than to feed empty chunks through generator.
> @@ -2959,19 +2950,16 @@ class _zlibengine(object):
>
>  compressionengines.register('zlib', _zlibengine())
>
>  class _bz2engine(object):
>      @property
>      def bundletype(self):
>          return 'BZ'
>
> -    def compressorobj(self):
> -        return bz2.BZ2Compressor()
> -
>      def compressstream(self, it, opts=None):
>          opts = opts or {}
>          z = bz2.BZ2Compressor(opts.get('level', 9))
>          for chunk in it:
>              data = z.compress(chunk)
>              if data:
>                  yield data
>
> @@ -2987,45 +2975,35 @@ class _bz2engine(object):
>
>  compressionengines.register('bz2', _bz2engine())
>
>  class _truncatedbz2engine(object):
>      @property
>      def bundletype(self):
>          return '_truncatedBZ'
>
> -    # We don't implement compressorobj because it is hackily handled elsewhere.
> +    # We don't implement compressstream because it is hackily handled elsewhere.
>
>      def decompressorreader(self, fh):
>          def gen():
>              # The input stream doesn't have the 'BZ' header. So add it back.
>              d = bz2.BZ2Decompressor()
>              d.decompress('BZ')
>              for chunk in filechunkiter(fh):
>                  yield d.decompress(chunk)
>
>          return chunkbuffer(gen())
>
>  compressionengines.register('bz2truncated', _truncatedbz2engine())
>
> -class nocompress(object):
> -    def compress(self, x):
> -        return x
> -
> -    def flush(self):
> -        return ''
> -
>  class _noopengine(object):
>      @property
>      def bundletype(self):
>          return 'UN'
>
> -    def compressorobj(self):
> -        return nocompress()
> -
>      def compressstream(self, it, opts=None):
>          return it
>
>      def decompressorreader(self, fh):
>          return fh
>
>  compressionengines.register('none', _noopengine())
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list