commit:     e30ad8803d82f11776f2da55b6650dee715154fa
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 17 11:10:23 2015 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Jan 18 18:04:24 2015 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=e30ad880

compression_probe: support lz4, lzip, lzop

---
 pym/portage/util/compression_probe.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/pym/portage/util/compression_probe.py 
b/pym/portage/util/compression_probe.py
index 1dc3547..74f74b1 100644
--- a/pym/portage/util/compression_probe.py
+++ b/pym/portage/util/compression_probe.py
@@ -14,14 +14,22 @@ from portage.exception import FileNotFound, PermissionDenied
 _decompressors = {
        "bzip2": "${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d}",
        "gzip": "gzip -d",
+       "lz4": "lz4 -d",
+       "lzip": "lzip -d",
+       "lzop": "lzop -d",
        "xz": "xz -d",
 }
 
 _compression_re = re.compile(b'^(' +
        b'(?P<bzip2>\x42\x5a\x68\x39)|' +
        b'(?P<gzip>\x1f\x8b)|' +
+       b'(?P<lz4>(?:\x04\x22\x4d\x18|\x02\x21\x4c\x18))|' +
+       b'(?P<lzip>LZIP)|' +
+       b'(?P<lzop>\x89LZO\x00\x0d\x0a\x1a\x0a)|' +
        b'(?P<xz>\xfd\x37\x7a\x58\x5a\x00))')
 
+_max_compression_re_len = 9
+
 def compression_probe(f):
        """
        Identify the compression type of a file. Returns one of the
@@ -29,6 +37,9 @@ def compression_probe(f):
 
                bzip2
                gzip
+               lz4
+               lzip
+               lzop
                xz
 
        @param f: a file path, or file-like object
@@ -59,7 +70,7 @@ def compression_probe(f):
 
 def _compression_probe_file(f):
 
-       m = _compression_re.match(f.read(6))
+       m = _compression_re.match(f.read(_max_compression_re_len))
        if m is not None:
                for k, v in m.groupdict().items():
                        if v is not None:

Reply via email to