commit:     2b40f119d4334bd3d4bcd2824f575700963b40ef
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed May  2 01:27:30 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed May  2 01:49:03 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2b40f119

BINPKG_COMPRESS: allow empty setting to disable compression (bug 654456)

In some cases it might make sense to disable compression, so
allow an empty setting to disable compression (consistent with
PORTAGE_COMPRESS).

Bug: https://bugs.gentoo.org/654456

 bin/misc-functions.sh                  |  2 +-
 bin/quickpkg                           | 11 +++++++++--
 pym/_emerge/BinpkgExtractorAsync.py    | 16 ++++++++++++----
 pym/portage/package/ebuild/doebuild.py |  6 +++++-
 4 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index a6330ee93..0648e6cfd 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -481,7 +481,7 @@ __dyn_package() {
        [ -z "${PORTAGE_COMPRESSION_COMMAND}" ] && \
         die "PORTAGE_COMPRESSION_COMMAND is unset"
        tar $tar_options -cf - $PORTAGE_BINPKG_TAR_OPTS -C "${D}" . | \
-               $PORTAGE_COMPRESSION_COMMAND -c > "$PORTAGE_BINPKG_TMPFILE"
+               $PORTAGE_COMPRESSION_COMMAND > "$PORTAGE_BINPKG_TMPFILE"
        assert "failed to pack binary package: '$PORTAGE_BINPKG_TMPFILE'"
        PYTHONPATH=${PORTAGE_PYTHONPATH:-${PORTAGE_PYM_PATH}} \
                "${PORTAGE_PYTHON:-/usr/bin/python}" 
"$PORTAGE_BIN_PATH"/xpak-helper.py recompose \

diff --git a/bin/quickpkg b/bin/quickpkg
index ec6f50409..9765ec717 100755
--- a/bin/quickpkg
+++ b/bin/quickpkg
@@ -142,8 +142,15 @@ def quickpkg_atom(options, infos, arg, eout):
                        try:
                                compression = _compressors[binpkg_compression]
                        except KeyError as e:
-                               eout.eerror("Invalid or unsupported compression 
method: %s" % e.args[0])
-                               return 1
+                               if binpkg_compression:
+                                       eout.eerror("Invalid or unsupported 
compression method: %s" % e.args[0])
+                                       return 1
+                               # Empty BINPKG_COMPRESS disables compression.
+                               binpkg_compression = 'none'
+                               compression = {
+                                       'compress': 'cat',
+                                       'package': 'sys-apps/coreutils',
+                               }
                        try:
                                compression_binary = 
shlex_split(varexpand(compression["compress"], mydict=settings))[0]
                        except IndexError as e:

diff --git a/pym/_emerge/BinpkgExtractorAsync.py 
b/pym/_emerge/BinpkgExtractorAsync.py
index 4468efde6..3733bdeb5 100644
--- a/pym/_emerge/BinpkgExtractorAsync.py
+++ b/pym/_emerge/BinpkgExtractorAsync.py
@@ -17,6 +17,8 @@ from portage.util import (
 )
 import signal
 import subprocess
+import tarfile
+
 
 class BinpkgExtractorAsync(SpawnProcess):
 
@@ -38,6 +40,13 @@ class BinpkgExtractorAsync(SpawnProcess):
                decomp = _compressors.get(compression_probe(self.pkg_path))
                if decomp is not None:
                        decomp_cmd = decomp.get("decompress")
+               elif tarfile.is_tarfile(portage._unicode_encode(self.pkg_path,
+                       encoding=portage._encodings['fs'], errors='strict')):
+                       decomp_cmd = 'cat'
+                       decomp = {
+                               'compress': 'cat',
+                               'package': 'sys-apps/coreutils',
+                       }
                else:
                        decomp_cmd = None
                if decomp_cmd is None:
@@ -56,16 +65,15 @@ class BinpkgExtractorAsync(SpawnProcess):
 
                if find_binary(decompression_binary) is None:
                        # Try alternative command if it exists
-                       if 
_compressors.get(compression_probe(self.pkg_path)).get("decompress_alt"):
-                               decomp_cmd = _compressors.get(
-                                       
compression_probe(self.pkg_path)).get("decompress_alt")
+                       if decomp.get("decompress_alt"):
+                               decomp_cmd = decomp.get("decompress_alt")
                        try:
                                decompression_binary = 
shlex_split(varexpand(decomp_cmd, mydict=self.env))[0]
                        except IndexError:
                                decompression_binary = ""
 
                        if find_binary(decompression_binary) is None:
-                               missing_package = 
_compressors.get(compression_probe(self.pkg_path)).get("package")
+                               missing_package = decomp.get("package")
                                self.scheduler.output("!!! %s\n" %
                                        _("File compression unsupported %s.\n 
Command was: %s.\n Maybe missing package: %s") %
                                        (self.pkg_path, varexpand(decomp_cmd, 
mydict=self.env), missing_package), log_path=self.logfile,

diff --git a/pym/portage/package/ebuild/doebuild.py 
b/pym/portage/package/ebuild/doebuild.py
index 0dabafeb7..31b552ff3 100644
--- a/pym/portage/package/ebuild/doebuild.py
+++ b/pym/portage/package/ebuild/doebuild.py
@@ -534,7 +534,11 @@ def doebuild_environment(myebuild, mydo, myroot=None, 
settings=None,
                try:
                        compression = _compressors[binpkg_compression]
                except KeyError as e:
-                       writemsg("Warning: Invalid or unsupported compression 
method: %s" % e.args[0])
+                       if binpkg_compression:
+                               writemsg("Warning: Invalid or unsupported 
compression method: %s" % e.args[0])
+                       else:
+                               # Empty BINPKG_COMPRESS disables compression.
+                               mysettings['PORTAGE_COMPRESSION_COMMAND'] = 
'cat'
                else:
                        try:
                                compression_binary = 
shlex_split(varexpand(compression["compress"], mydict=settings))[0]

Reply via email to