On Wed, Jul 01, 2015 at 04:04:57PM -0700, Dylan Baker wrote: > This requires that there is an xz binary installed, and accessible, > obviously. > > v4: - add this patch > > Signed-off-by: Dylan Baker <dylanx.c.ba...@intel.com> > --- > framework/backends/compression.py | 82 > ++++++++++++++++++++++++++++- > framework/tests/compressed_backend_tests.py | 17 ++++++ > 2 files changed, 98 insertions(+), 1 deletion(-) > > diff --git a/framework/backends/compression.py > b/framework/backends/compression.py > index 153dc94..ef97c95 100644 > --- a/framework/backends/compression.py > +++ b/framework/backends/compression.py > @@ -43,15 +43,17 @@ they're passing unicode and not bytes. > > from __future__ import print_function, absolute_import, division > import bz2 > +import errno > import functools > import gzip > import os > +import subprocess > > from framework import exceptions > from framework.core import PIGLIT_CONFIG > > -# TODO: in python3 the bz2 module has an open function > > +# TODO: in python3 the bz2 module has an open function > COMPRESSION_SUFFIXES = ['.gz', '.bz2'] > > DEFAULT = 'bz2' > @@ -68,6 +70,84 @@ DECOMPRESSORS = { > 'none': functools.partial(open, mode='r'), > } > > +# TODO: in python3 there is builtin xz support, and doesn't need this madness > +# If there is an xz binary then try calling out to that > +try: > + with open(os.devnull, 'w') as d: > + subprocess.check_call(['xz'], stderr=d) > +except subprocess.CalledProcessError as e: > + if e.returncode == 1: > + import contextlib > + try: > + import cStringIO as StringIO > + except ImportError: > + import StringIO > + > + @contextlib.contextmanager > + def _compress_xz(filename): > + """Emulates an open function in write mode for xz. > + > + Python 2.x doesn't support xz, but it's dang useful. This > function calls > + out to the shell and tries to use xz from the environment to get > xz > + compression. > + > + This obviously won't work without a working xz binary. > + > + This function tries to emulate the default values of the lzma > module in > + python3 as much as possible > + > + """ > + if filename.endswith('.xz'): > + filename = filename[:-2] > + > + with open(filename, 'w') as f: > + yield f > + > + try: > + subprocess.check_call(['xz', '--compress', '-9', filename]) > + except OSError as e: > + if e.errno == errno.ENOENT: > + raise exceptions.PiglitFatalError('No xz binary > available') > + raise > + > + @contextlib.contextmanager > + def _decompress_xz(filename): > + """Eumlates an option function in read mode for xz. > + > + See the comment in _compress_xz for more information. > + > + This module tries to emulate the lzma module as much as possible > + > + """ > + if not filename.endswith('.xz'): > + filename = '{}.xz'.format(filename) > + > + print('decompress: ' + filename)
Oops: debugging print left in there. I've removed this from the branch > + > + try: > + string = subprocess.check_output( > + ['xz', '--decompress', '--stdout', filename]) > + except OSError as e: > + if e.errno == errno.ENOENT: > + raise exceptions.PiglitFatalError('No xz binary > available') > + raise > + > + # We need a file-like object, so the contents must be placed in > a StringIO > + # object. > + io = StringIO.StringIO() > + io.write(string) > + io.seek(0) > + > + yield io > + > + io.close() > + > + COMPRESSORS['xz'] = _compress_xz > + DECOMPRESSORS['xz'] = _decompress_xz > + COMPRESSION_SUFFIXES += ['.xz'] > +except OSError: > + pass > + > > def _set_mode(): > """Set the compression mode. > diff --git a/framework/tests/compressed_backend_tests.py > b/framework/tests/compressed_backend_tests.py > index 7af633d..2353c7b 100644 > --- a/framework/tests/compressed_backend_tests.py > +++ b/framework/tests/compressed_backend_tests.py > @@ -218,3 +218,20 @@ def test_decompress_bz2(): > def test_bz2_output(): > """framework.backends: when using bz2 compression a bz2 file is > created""" > nt.eq_(_test_extension(), '.bz2') > + > + > +@utils.no_error > +def test_compress_xz(): > + """framework.backends.compression: can compress to 'xz'""" > + _test_compressor('xz') > + > + > +def test_decompress_xz(): > + """framework.backends.compression: can decompress from 'xz'""" > + _test_decompressor('xz') > + > + > +@_set_compression_mode('xz') > +def test_xz_output(): > + """framework.backends: when using xz compression a xz file is created""" > + nt.eq_(_test_extension(), '.xz') > -- > 2.4.5 >
signature.asc
Description: Digital signature
_______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit