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]
