[PATCH 01 of 11] util: put compression code next to each other
Gregory Szorc
gregory.szorc at gmail.com
Wed Nov 2 00:08:34 UTC 2016
# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1476577441 25200
# Sat Oct 15 17:24:01 2016 -0700
# Node ID 60f180c9a030ebcee6c6f4f8584fdb94c73ac337
# Parent e5cc44ea12de681d971fcbebb65a7fb71fd1c3c7
util: put compression code next to each other
ctxmanager was injecting itself between the compression and
decompression code. Let's restore some order.
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -2789,42 +2789,16 @@ if safehasattr(parsers, 'dirs'):
dirs = parsers.dirs
def finddirs(path):
pos = path.rfind('/')
while pos != -1:
yield path[:pos]
pos = path.rfind('/', 0, pos)
-# compression utility
-
-class nocompress(object):
- def compress(self, x):
- return x
- def flush(self):
- return ""
-
-compressors = {
- None: nocompress,
- # lambda to prevent early import
- 'BZ': lambda: bz2.BZ2Compressor(),
- 'GZ': lambda: zlib.compressobj(),
- }
-# also support the old form by courtesies
-compressors['UN'] = compressors[None]
-
-def _makedecompressor(decompcls):
- def generator(f):
- d = decompcls()
- for chunk in filechunkiter(f):
- yield d.decompress(chunk)
- def func(fh):
- return chunkbuffer(generator(fh))
- return func
-
class ctxmanager(object):
'''A context manager for use in 'with' blocks to allow multiple
contexts to be entered at once. This is both safer and more
flexible than contextlib.nested.
Once Mercurial supports Python 2.7+, this will become mostly
unnecessary.
'''
@@ -2875,16 +2849,42 @@ class ctxmanager(object):
except BaseException:
pending = sys.exc_info()
exc_type, exc_val, exc_tb = pending = sys.exc_info()
del self._atexit
if pending:
raise exc_val
return received and suppressed
+# compression utility
+
+class nocompress(object):
+ def compress(self, x):
+ return x
+ def flush(self):
+ return ""
+
+compressors = {
+ None: nocompress,
+ # lambda to prevent early import
+ 'BZ': lambda: bz2.BZ2Compressor(),
+ 'GZ': lambda: zlib.compressobj(),
+ }
+# also support the old form by courtesies
+compressors['UN'] = compressors[None]
+
+def _makedecompressor(decompcls):
+ def generator(f):
+ d = decompcls()
+ for chunk in filechunkiter(f):
+ yield d.decompress(chunk)
+ def func(fh):
+ return chunkbuffer(generator(fh))
+ return func
+
def _bz2():
d = bz2.BZ2Decompressor()
# Bzip2 stream start with BZ, but we stripped it.
# we put it back for good measure.
d.decompress('BZ')
return d
decompressors = {None: lambda fh: fh,
More information about the Mercurial-devel
mailing list