Hello community, here is the log from the commit of package python-kiwi for openSUSE:Factory checked in at 2018-05-23 16:05:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-kiwi (Old) and /work/SRC/openSUSE:Factory/.python-kiwi.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-kiwi" Wed May 23 16:05:55 2018 rev:28 rq:609805 version:9.15.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-kiwi/python-kiwi.changes 2018-05-13 15:54:47.160835021 +0200 +++ /work/SRC/openSUSE:Factory/.python-kiwi.new/python-kiwi.changes 2018-05-23 16:05:58.296861200 +0200 @@ -1,0 +2,56 @@ +Wed May 16 11:48:00 CEST 2018 - m...@suse.de + +- Bump version: 9.15.1 → 9.15.2 + +------------------------------------------------------------------- +Wed May 16 11:31:40 CEST 2018 - dcass...@suse.com + +- Fix zypper add lock operations + + This commit fixes the arguments passed to zypper in add lock + operations. + +------------------------------------------------------------------- +Tue May 15 15:48:24 CEST 2018 - dcass...@suse.com + +- Add correct GPL-3.0-or-later license + + Add the correct license reference in the spec License field + + Fixes #732 + +------------------------------------------------------------------- +Tue May 15 11:18:22 CEST 2018 - m...@suse.de + +- Make container compression a configuration option + + Change the ContainerBuilder class to evaluate on the + configuration options to decide if the container archive + should be compressed or not. By default the archive will + be compressed, thus there is no change to the former behavior + but can be setup in ~/.config/kiwi/config.yml as follows: + + container: +- compress: none|xz + + This Fixes #725 + +------------------------------------------------------------------- +Tue May 15 10:36:57 CEST 2018 - m...@suse.de + +- Return file name after archive or compression call + + Extend the ArchiveTar and Compress classes such that + their archiving and compression methods returns the + result file name after the operation + +------------------------------------------------------------------- +Tue May 15 10:02:52 CEST 2018 - m...@suse.de + +- Allow docker root import from uncompressed file + + Check the given file name for its compression format and + only uncompress if a supported format could be detected. + This Fixes #730 + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-kiwi.spec ++++++ --- /var/tmp/diff_new_pack.y012Sd/_old 2018-05-23 16:05:59.244826475 +0200 +++ /var/tmp/diff_new_pack.y012Sd/_new 2018-05-23 16:05:59.252826181 +0200 @@ -38,12 +38,12 @@ %endif Name: python-kiwi -Version: 9.15.1 +Version: 9.15.2 Provides: kiwi-schema = 6.6 Release: 0 Url: https://github.com/SUSE/kiwi Summary: KIWI - Appliance Builder Next Generation -License: GPL-3.0+ +License: GPL-3.0-or-later %if %{_vendor} == "debbuild" # Needed to set Maintainer in output debs Packager: Marcus Schaefer <m...@suse.de> @@ -232,7 +232,7 @@ %package -n kiwi-tools Summary: KIWI - Collection of Boot Helper Tools -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-tools @@ -251,7 +251,7 @@ %else Requires(pre): shadow %endif -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-pxeboot @@ -298,7 +298,7 @@ %ifarch s390 s390x Requires: s390-tools %endif -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-lib @@ -314,7 +314,7 @@ BuildRequires: dracut %endif Requires: dracut-kiwi-lib -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-oem-repart @@ -340,7 +340,7 @@ Requires: device-mapper-multipath %endif Requires: gawk -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-oem-dump @@ -370,7 +370,7 @@ %endif Requires: dracut Requires: xorriso -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-live @@ -387,7 +387,7 @@ %endif Requires: util-linux Requires: dracut -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-overlay @@ -397,7 +397,7 @@ %package -n kiwi-man-pages Summary: KIWI - manual pages -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-man-pages ++++++ python-kiwi.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/.bumpversion.cfg new/kiwi-9.15.2/.bumpversion.cfg --- old/kiwi-9.15.1/.bumpversion.cfg 2018-05-09 14:53:02.000000000 +0200 +++ new/kiwi-9.15.2/.bumpversion.cfg 2018-05-16 11:48:00.000000000 +0200 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 9.15.1 +current_version = 9.15.2 commit = True tag = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/PKG-INFO new/kiwi-9.15.2/PKG-INFO --- old/kiwi-9.15.1/PKG-INFO 2018-05-09 14:58:53.000000000 +0200 +++ new/kiwi-9.15.2/PKG-INFO 2018-05-16 11:54:02.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: kiwi -Version: 9.15.1 +Version: 9.15.2 Summary: KIWI - Appliance Builder (next generation) Home-page: http://suse.github.io/kiwi Author: Marcus Schaefer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi.8 new/kiwi-9.15.2/doc/build/man/kiwi.8 --- old/kiwi-9.15.1/doc/build/man/kiwi.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi \- Creating Operating System Images . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::image::info.8 new/kiwi-9.15.2/doc/build/man/kiwi::image::info.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::image::info.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::image::info.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::IMAGE::INFO" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::IMAGE::INFO" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::image::info \- Provide detailed information about an image description . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::image::resize.8 new/kiwi-9.15.2/doc/build/man/kiwi::image::resize.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::image::resize.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::image::resize.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::IMAGE::RESIZE" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::IMAGE::RESIZE" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::image::resize \- Resize disk images to new geometry . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::result::bundle.8 new/kiwi-9.15.2/doc/build/man/kiwi::result::bundle.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::result::bundle.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::result::bundle.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::RESULT::BUNDLE" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::RESULT::BUNDLE" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::result::bundle \- Bundle build results . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::result::list.8 new/kiwi-9.15.2/doc/build/man/kiwi::result::list.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::result::list.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::result::list.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::RESULT::LIST" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::RESULT::LIST" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::result::list \- List build results . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::system::build.8 new/kiwi-9.15.2/doc/build/man/kiwi::system::build.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::system::build.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::system::build.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::SYSTEM::BUILD" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::SYSTEM::BUILD" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::system::build \- Build image in combined prepare and create step . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::system::create.8 new/kiwi-9.15.2/doc/build/man/kiwi::system::create.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::system::create.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::system::create.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::SYSTEM::CREATE" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::SYSTEM::CREATE" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::system::create \- Create image from prepared root system . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::system::prepare.8 new/kiwi-9.15.2/doc/build/man/kiwi::system::prepare.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::system::prepare.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::system::prepare.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::SYSTEM::PREPARE" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::SYSTEM::PREPARE" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::system::prepare \- Prepare image root system . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/build/man/kiwi::system::update.8 new/kiwi-9.15.2/doc/build/man/kiwi::system::update.8 --- old/kiwi-9.15.1/doc/build/man/kiwi::system::update.8 2018-05-09 14:58:43.000000000 +0200 +++ new/kiwi-9.15.2/doc/build/man/kiwi::system::update.8 2018-05-16 11:53:50.000000000 +0200 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "KIWI::SYSTEM::UPDATE" "8" "May 09, 2018" "9.15.1" "kiwi" +.TH "KIWI::SYSTEM::UPDATE" "8" "May 16, 2018" "9.15.2" "kiwi" .SH NAME kiwi::system::update \- Update/Upgrade image root system . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/doc/source/conf.py new/kiwi-9.15.2/doc/source/conf.py --- old/kiwi-9.15.1/doc/source/conf.py 2018-05-09 14:53:02.000000000 +0200 +++ new/kiwi-9.15.2/doc/source/conf.py 2018-05-16 11:48:00.000000000 +0200 @@ -90,7 +90,7 @@ # built documents. # # The short X.Y version. -version = u'9.15.1' +version = u'9.15.2' # The full version, including alpha/beta/rc tags. release = version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/archive/tar.py new/kiwi-9.15.2/kiwi/archive/tar.py --- old/kiwi-9.15.1/kiwi/archive/tar.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/archive/tar.py 2018-05-15 14:43:16.000000000 +0200 @@ -70,6 +70,7 @@ '-c', '-f', self.filename ] + self._get_archive_items(source_dir, exclude) ) + return self.filename def append_files(self, source_dir, files_to_append, options=None): """ @@ -88,6 +89,7 @@ ] + options + self.xattrs_options + files_to_append ) + return self.filename def create_xz_compressed( self, source_dir, exclude=None, options=None, xz_options=None @@ -114,6 +116,7 @@ '>', self.filename + '.xz' ] Command.run(['bash', '-c', ' '.join(bash_command)]) + return self.filename + '.xz' def create_gnu_gzip_compressed(self, source_dir, exclude=None): """ @@ -128,6 +131,7 @@ '--format=gnu', '-cSz', '-f', self.filename + '.gz' ] + self._get_archive_items(source_dir, exclude) ) + return self.filename + '.gz' def extract(self, dest_dir): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/builder/container.py new/kiwi-9.15.2/kiwi/builder/container.py --- old/kiwi-9.15.1/kiwi/builder/container.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/builder/container.py 2018-05-15 14:43:16.000000000 +0200 @@ -82,7 +82,7 @@ xml_state.xml_data.get_name(), '.' + platform.machine(), '-' + xml_state.get_image_version(), - '.', self.requested_container_type, '.tar.xz' + '.', self.requested_container_type, '.tar' ] ) self.result = Result(xml_state) @@ -125,7 +125,7 @@ container_image = ContainerImage( self.requested_container_type, self.root_dir, self.container_config ) - container_image.create( + self.filename = container_image.create( self.filename, self.base_image ) self.result.verify_image_size( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/container/docker.py new/kiwi-9.15.2/kiwi/container/docker.py --- old/kiwi-9.15.1/kiwi/container/docker.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/container/docker.py 2018-05-15 14:43:16.000000000 +0200 @@ -34,23 +34,26 @@ :param string filename: file name of the resulting packed image """ - docker_tarfile = filename.replace('.xz', '') oci_image = os.sep.join([ self.oci_dir, ':'.join(['umoci_layout', self.container_tag]) ]) - # make sure the target tar file does not exist + # make sure the target archive file does not exist # skopeo doesn't support force overwrite - Path.wipe(docker_tarfile) + Path.wipe(filename) Command.run( [ 'skopeo', 'copy', 'oci:{0}'.format( oci_image ), 'docker-archive:{0}:{1}:{2}'.format( - docker_tarfile, self.container_name, self.container_tag + filename, self.container_name, self.container_tag ) ] ) - compressor = Compress(docker_tarfile) - compressor.xz(self.xz_options) + container_compressor = self.runtime_config.get_container_compression() + if container_compressor: + compressor = Compress(filename) + return compressor.xz(self.runtime_config.get_xz_options()) + else: + return filename diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/container/oci.py new/kiwi-9.15.2/kiwi/container/oci.py --- old/kiwi-9.15.1/kiwi/container/oci.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/container/oci.py 2018-05-15 14:43:16.000000000 +0200 @@ -26,6 +26,7 @@ from kiwi.utils.sync import DataSync from kiwi.archive.tar import ArchiveTar from kiwi.logger import log +from kiwi.runtime_config import RuntimeConfig class ContainerImageOCI(object): @@ -63,8 +64,7 @@ '--config.volume=/tmp' ], 'environment': ['--config.env=PATH=/bin'], - 'labels': ['--config.label=name=value'], - 'xz_options': ['--threads=0'] + 'labels': ['--config.label=name=value'] } """ def __init__(self, root_dir, custom_args=None): # noqa: C901 @@ -72,7 +72,6 @@ self.oci_dir = None self.oci_root_dir = None - self.xz_options = None self.container_name = 'kiwi-container' self.container_tag = 'latest' self.entry_command = [] @@ -85,6 +84,8 @@ self.environment = [] self.labels = [] + self.runtime_config = RuntimeConfig() + if custom_args: if 'container_name' in custom_args: self.container_name = custom_args['container_name'] @@ -119,9 +120,6 @@ if 'labels' in custom_args: self.labels = custom_args['labels'] - if 'xz_options' in custom_args: - self.xz_options = custom_args['xz_options'] - # for builds inside the buildservice we include a reference to the # specific build. Thus disturl label only exists inside the # buildservice. @@ -214,7 +212,7 @@ ['umoci', 'gc', '--layout', container_dir] ) - self.pack_image_to_file(filename) + return self.pack_image_to_file(filename) def pack_image_to_file(self, filename): """ @@ -223,10 +221,14 @@ :param string filename: file name of the resulting packed image """ image_dir = os.sep.join([self.oci_dir, 'umoci_layout']) - oci_tarfile = ArchiveTar(filename.replace('.xz', '')) - oci_tarfile.create_xz_compressed( - image_dir, xz_options=self.xz_options - ) + oci_tarfile = ArchiveTar(filename) + container_compressor = self.runtime_config.get_container_compression() + if container_compressor: + return oci_tarfile.create_xz_compressed( + image_dir, xz_options=self.runtime_config.get_xz_options() + ) + else: + return oci_tarfile.create(image_dir) def _append_buildservice_disturl_label(self): with open(os.sep + Defaults.get_buildservice_env_name()) as env: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/defaults.py new/kiwi-9.15.2/kiwi/defaults.py --- old/kiwi-9.15.1/kiwi/defaults.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/defaults.py 2018-05-15 14:43:16.000000000 +0200 @@ -1071,6 +1071,17 @@ return 'xorriso' @classmethod + def get_container_compression(self): + """ + Provides default container compression algorithm + + :return: name + + :rtype: str + """ + return 'xz' + + @classmethod def set_python_default_encoding_to_utf8(self): """ Set python default encoding to utf-8 if not already done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/package_manager/zypper.py new/kiwi-9.15.2/kiwi/package_manager/zypper.py --- old/kiwi-9.15.1/kiwi/package_manager/zypper.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/package_manager/zypper.py 2018-05-16 11:47:53.000000000 +0200 @@ -130,11 +130,8 @@ Path.create(metadata_dir) for package in self.exclude_requests: Command.run( - [ - 'chroot', self.root_dir, 'zypper' - ] + self.chroot_zypper_args + [ - 'al' - ] + self.custom_args + [package], + ['chroot', self.root_dir, 'zypper'] + + self.chroot_zypper_args + ['al'] + [package], self.chroot_command_env ) return Command.call( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/runtime_config.py new/kiwi-9.15.2/kiwi/runtime_config.py --- old/kiwi-9.15.1/kiwi/runtime_config.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/runtime_config.py 2018-05-15 14:43:16.000000000 +0200 @@ -108,6 +108,37 @@ xz_options = self._get_attribute(element='xz', attribute='options') return xz_options.split() if xz_options else None + def get_container_compression(self): + """ + Return compression algorithm to use for compression of container images + + container: + - compress: xz|none + + if no or invalid configuration data is provided, the default + compression algorithm from the Defaults class is returned + + :return: A name + + :rtype: str + """ + container_compression = self._get_attribute( + element='container', attribute='compress' + ) + if not container_compression: + return Defaults.get_container_compression() + elif 'xz' in container_compression: + return container_compression + elif 'none' in container_compression: + return None + else: + log.warning( + 'Skipping invalid container compression: {0}'.format( + container_compression + ) + ) + return Defaults.get_container_compression() + def get_iso_tool_category(self): """ Return tool category which should be used to build iso images diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/system/root_import/docker.py new/kiwi-9.15.2/kiwi/system/root_import/docker.py --- old/kiwi-9.15.1/kiwi/system/root_import/docker.py 2018-04-18 10:31:36.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/system/root_import/docker.py 2018-05-15 14:43:16.000000000 +0200 @@ -34,8 +34,11 @@ """ if not self.unknown_uri: compressor = Compress(self.image_file) - compressor.uncompress(True) - self.uncompressed_image = compressor.uncompressed_filename + if compressor.get_format(): + compressor.uncompress(True) + self.uncompressed_image = compressor.uncompressed_filename + else: + self.uncompressed_image = self.image_file skopeo_uri = 'docker-archive:{0}'.format(self.uncompressed_image) else: log.warning('Bypassing base image URI to skopeo tool') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/system/root_import/oci.py new/kiwi-9.15.2/kiwi/system/root_import/oci.py --- old/kiwi-9.15.1/kiwi/system/root_import/oci.py 2018-04-18 10:31:36.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/system/root_import/oci.py 2018-05-15 14:43:16.000000000 +0200 @@ -31,7 +31,7 @@ class RootImportOCI(RootImportBase): """ Implements the base class for importing a root system from - a oci image compressed tarball file. + a oci image tarball file. """ def post_init(self, image_uri): """ @@ -73,8 +73,8 @@ def extract_oci_image(self): """ - Extract the image from the provided image file to a temporary - location to KIWI can work with it. + Extract the contents from the provided image file to a temporary + location KIWI can work with. """ if not self.unknown_uri: tar = ArchiveTar(self.image_file) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/utils/compress.py new/kiwi-9.15.2/kiwi/utils/compress.py --- old/kiwi-9.15.1/kiwi/utils/compress.py 2018-04-20 15:57:24.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/utils/compress.py 2018-05-15 14:43:16.000000000 +0200 @@ -67,6 +67,7 @@ ['xz', '-f'] + options + [self.source_filename] ) self.compressed_filename = self.source_filename + '.xz' + return self.compressed_filename def gzip(self): """ @@ -81,6 +82,7 @@ ['gzip', '-f'] + options + [self.source_filename] ) self.compressed_filename = self.source_filename + '.gz' + return self.compressed_filename def uncompress(self, temporary=False): """ @@ -109,6 +111,7 @@ ] Command.run(['bash', '-c', ' '.join(bash_command)]) self.uncompressed_filename = self.temp_file.name + return self.uncompressed_filename def get_format(self): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi/version.py new/kiwi-9.15.2/kiwi/version.py --- old/kiwi-9.15.1/kiwi/version.py 2018-05-09 14:53:02.000000000 +0200 +++ new/kiwi-9.15.2/kiwi/version.py 2018-05-16 11:48:00.000000000 +0200 @@ -18,5 +18,5 @@ """ Global version information used in kiwi and the package """ -__version__ = '9.15.1' -__githash__ = '2a6ef0fe5217b3fa52c5c8212c080e9d2aebad4b' +__version__ = '9.15.2' +__githash__ = 'bb28768b39596e969a2b226145e33cebfb8160a0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/kiwi.egg-info/PKG-INFO new/kiwi-9.15.2/kiwi.egg-info/PKG-INFO --- old/kiwi-9.15.1/kiwi.egg-info/PKG-INFO 2018-05-09 14:58:53.000000000 +0200 +++ new/kiwi-9.15.2/kiwi.egg-info/PKG-INFO 2018-05-16 11:54:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: kiwi -Version: 9.15.1 +Version: 9.15.2 Summary: KIWI - Appliance Builder (next generation) Home-page: http://suse.github.io/kiwi Author: Marcus Schaefer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/package/python-kiwi-spec-template new/kiwi-9.15.2/package/python-kiwi-spec-template --- old/kiwi-9.15.1/package/python-kiwi-spec-template 2018-03-23 08:53:27.000000000 +0100 +++ new/kiwi-9.15.2/package/python-kiwi-spec-template 2018-05-16 11:30:14.000000000 +0200 @@ -43,7 +43,7 @@ Release: 0 Url: https://github.com/SUSE/kiwi Summary: KIWI - Appliance Builder Next Generation -License: GPL-3.0+ +License: GPL-3.0-or-later %if %{_vendor} == "debbuild" # Needed to set Maintainer in output debs Packager: Marcus Schaefer <m...@suse.de> @@ -232,7 +232,7 @@ %package -n kiwi-tools Summary: KIWI - Collection of Boot Helper Tools -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-tools @@ -251,7 +251,7 @@ %else Requires(pre): shadow %endif -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-pxeboot @@ -298,7 +298,7 @@ %ifarch s390 s390x Requires: s390-tools %endif -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-lib @@ -314,7 +314,7 @@ BuildRequires: dracut %endif Requires: dracut-kiwi-lib -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-oem-repart @@ -340,7 +340,7 @@ Requires: device-mapper-multipath %endif Requires: gawk -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-oem-dump @@ -370,7 +370,7 @@ %endif Requires: dracut Requires: xorriso -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-live @@ -387,7 +387,7 @@ %endif Requires: util-linux Requires: dracut -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n dracut-kiwi-overlay @@ -397,7 +397,7 @@ %package -n kiwi-man-pages Summary: KIWI - manual pages -License: GPL-3.0+ +License: GPL-3.0-or-later Group: %{sysgroup} %description -n kiwi-man-pages diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/archive_tar_test.py new/kiwi-9.15.2/test/unit/archive_tar_test.py --- old/kiwi-9.15.1/test/unit/archive_tar_test.py 2018-01-22 19:28:47.000000000 +0100 +++ new/kiwi-9.15.2/test/unit/archive_tar_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -36,7 +36,7 @@ @patch('os.listdir') def test_create(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create('source-dir') + assert self.archive.create('source-dir') == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', @@ -47,7 +47,8 @@ @patch('kiwi.archive.tar.Command.run') def test_append_files(self, mock_command): - self.archive.append_files('source-dir', ['foo', 'bar']) + assert self.archive.append_files('source-dir', ['foo', 'bar']) \ + == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '-r', @@ -61,9 +62,9 @@ @patch('os.listdir') def test_create_with_options(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create('source-dir', options=[ + assert self.archive.create('source-dir', options=[ '--fake-option', 'fake_arg' - ]) + ]) == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', @@ -81,7 +82,7 @@ mock_command.return_value = command archive = ArchiveTar('foo.tar') mock_os_dir.return_value = ['foo', 'bar'] - archive.create('source-dir') + assert archive.create('source-dir') == 'foo.tar' calls = [ call(['tar', '--version']), call( @@ -100,7 +101,7 @@ command.output = 'version 1.27.0' mock_command.return_value = command archive = ArchiveTar('foo.tar', False) - archive.create('source-dir', ['foo', 'bar']) + assert archive.create('source-dir', ['foo', 'bar']) == 'foo.tar' calls = [ call(['tar', '--version']), call( @@ -118,7 +119,7 @@ @patch('os.listdir') def test_create_xz_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create_xz_compressed('source-dir') + assert self.archive.create_xz_compressed('source-dir') == 'foo.tar.xz' mock_command.assert_called_once_with( [ 'bash', '-c', @@ -137,7 +138,9 @@ self, mock_os_dir, mock_command ): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create_xz_compressed('source-dir', xz_options=['-a', '-b']) + assert self.archive.create_xz_compressed( + 'source-dir', xz_options=['-a', '-b'] + ) == 'foo.tar.xz' mock_command.assert_called_once_with( [ 'bash', '-c', @@ -154,7 +157,8 @@ @patch('os.listdir') def test_create_gnu_gzip_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create_gnu_gzip_compressed('source-dir') + assert self.archive.create_gnu_gzip_compressed('source-dir') \ + == 'foo.tar.gz' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', @@ -166,7 +170,7 @@ @patch('os.listdir') def test_create_exclude(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] - self.archive.create('source-dir', ['foo']) + assert self.archive.create('source-dir', ['foo']) == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/builder_container_test.py new/kiwi-9.15.2/test/unit/builder_container_test.py --- old/kiwi-9.15.1/test/unit/builder_container_test.py 2017-11-22 09:06:34.000000000 +0100 +++ new/kiwi-9.15.2/test/unit/builder_container_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -110,6 +110,9 @@ container_setup = mock.Mock() mock_setup.return_value = container_setup container_image = mock.Mock() + container_image.create = mock.Mock( + return_value='target_dir/image_name.x86_64-1.2.3.docker.tar.xz' + ) mock_image.return_value = container_image self.setup.export_package_verification.return_value = '.verified' self.setup.export_package_list.return_value = '.packages' @@ -123,7 +126,7 @@ 'docker', 'root_dir', self.container_config ) container_image.create.assert_called_once_with( - 'target_dir/image_name.x86_64-1.2.3.docker.tar.xz', None + 'target_dir/image_name.x86_64-1.2.3.docker.tar', None ) assert self.container.result.add.call_args_list == [ call( @@ -167,6 +170,12 @@ mock_exists.side_effect = side_effect + container_image = mock.Mock() + container_image.create = mock.Mock( + return_value='target_dir/image_name.x86_64-1.2.3.docker.tar.xz' + ) + mock_image.return_value = container_image + container = ContainerBuilder( self.xml_state, 'target_dir', 'root_dir' ) @@ -178,8 +187,6 @@ ) mock_checksum.return_value = checksum - container_image = mock.Mock() - mock_image.return_value = container_image self.setup.export_package_verification.return_value = '.verified' self.setup.export_package_list.return_value = '.packages' @@ -194,7 +201,7 @@ 'docker', 'root_dir', self.container_config ) container_image.create.assert_called_once_with( - 'target_dir/image_name.x86_64-1.2.3.docker.tar.xz', + 'target_dir/image_name.x86_64-1.2.3.docker.tar', 'root_dir/image/imported_root' ) assert container.result.add.call_args_list == [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/container_image_docker_test.py new/kiwi-9.15.2/test/unit/container_image_docker_test.py --- old/kiwi-9.15.1/test/unit/container_image_docker_test.py 2017-09-15 10:37:16.000000000 +0200 +++ new/kiwi-9.15.2/test/unit/container_image_docker_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -1,17 +1,29 @@ -from mock import call -from mock import patch +from mock import ( + call, patch, Mock +) from kiwi.container.docker import ContainerImageDocker class TestContainerImageDocker(object): - @patch('kiwi.container.docker.Compress') @patch('kiwi.container.oci.Command.run') - def test_pack_image_to_file(self, mock_command, mock_compress): + @patch('kiwi.container.oci.RuntimeConfig') + def test_pack_image_to_file( + self, mock_RuntimeConfig, mock_command, mock_compress + ): + compressor = Mock() + compressor.xz = Mock( + return_value='result.tar.xz' + ) + mock_compress.return_value = compressor docker = ContainerImageDocker('root_dir', {'container_name': 'foo/bar'}) docker.oci_dir = 'kiwi_oci_dir' - docker.pack_image_to_file('result.tar.xz') + docker.runtime_config.get_container_compression = Mock( + return_value='xz' + ) + + assert docker.pack_image_to_file('result.tar') == 'result.tar.xz' assert mock_command.call_args_list == [ call(['rm', '-r', '-f', 'result.tar']), @@ -21,3 +33,12 @@ ]) ] mock_compress.assert_called_once_with('result.tar') + compressor.xz.assert_called_once_with( + docker.runtime_config.get_xz_options.return_value + ) + + docker.runtime_config.get_container_compression = Mock( + return_value=None + ) + + assert docker.pack_image_to_file('result.tar') == 'result.tar' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/container_image_oci_test.py new/kiwi-9.15.2/test/unit/container_image_oci_test.py --- old/kiwi-9.15.1/test/unit/container_image_oci_test.py 2017-10-25 12:23:42.000000000 +0200 +++ new/kiwi-9.15.2/test/unit/container_image_oci_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -9,7 +9,8 @@ class TestContainerImageOCI(object): - def setup(self): + @patch('kiwi.container.oci.RuntimeConfig') + def setup(self, mock_RuntimeConfig): self.oci = ContainerImageOCI( 'root_dir', { 'container_name': 'foo/bar' @@ -46,8 +47,7 @@ 'labels': [ '--config.label=a=value', '--config.label=b=value' - ], - 'xz_options': ['-a', '-b'] + ] } container = ContainerImageOCI( 'root_dir', custom_args @@ -63,7 +63,6 @@ assert container.volumes == custom_args['volumes'] assert container.environment == custom_args['environment'] assert container.labels == custom_args['labels'] - assert container.xz_options == custom_args['xz_options'] def test_init_without_custom_args(self): container = ContainerImageOCI('root_dir') @@ -117,6 +116,8 @@ self, mock_cache, mock_mkdtemp, mock_sync, mock_command, mock_tar, mock_datetime ): + oci_tarfile = mock.Mock() + mock_tar.return_value = oci_tarfile strftime = mock.Mock() strftime.strftime = mock.Mock(return_value='current_date') mock_datetime.utcnow = mock.Mock( @@ -133,7 +134,11 @@ mock_mkdtemp.side_effect = call_mkdtemp - self.oci.create('result.tar.xz', None) + self.oci.runtime_config.get_container_compression = mock.Mock( + return_value='xz' + ) + + self.oci.create('result.tar', None) assert mock_command.call_args_list == [ call([ @@ -170,8 +175,22 @@ ], options=['-a', '-H', '-X', '-A', '--delete'] ) + mock_tar.assert_called_once_with('result.tar') + oci_tarfile.create_xz_compressed.assert_called_once_with( + 'kiwi_oci_dir/umoci_layout', + xz_options=self.oci.runtime_config.get_xz_options.return_value + ) - mock_tar.called_once_with('result.tar.xz') + tmpdirs = ['kiwi_oci_root_dir', 'kiwi_oci_dir'] + self.oci.runtime_config.get_container_compression = mock.Mock( + return_value=None + ) + + self.oci.create('result.tar', None) + + oci_tarfile.create.assert_called_once_with( + 'kiwi_oci_dir/umoci_layout' + ) @patch('kiwi.container.oci.datetime') @patch('kiwi.container.oci.ArchiveTar') @@ -200,7 +219,7 @@ mock_mkdtemp.side_effect = call_mkdtemp - self.oci.create('result.tar.xz', 'root_dir/image/image_file') + self.oci.create('result.tar', 'root_dir/image/image_file') mock_create.assert_called_once_with('kiwi_oci_dir/umoci_layout') @@ -235,6 +254,6 @@ ], options=['-a', '-H', '-X', '-A', '--delete'] ) - mock_tar.call_args_list == [ - call('root_dir/image/image_file'), call('result.tar.xz') + assert mock_tar.call_args_list == [ + call('root_dir/image/image_file'), call('result.tar') ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/runtime_config_test.py new/kiwi-9.15.2/test/unit/runtime_config_test.py --- old/kiwi-9.15.1/test/unit/runtime_config_test.py 2018-03-22 17:25:31.000000000 +0100 +++ new/kiwi-9.15.2/test/unit/runtime_config_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -38,6 +38,30 @@ assert runtime_config.get_obs_download_server_url() == \ Defaults.get_obs_download_server_url() + def test_get_container_compression(self): + assert self.runtime_config.get_container_compression() is None + + def test_get_container_compression_default(self): + with patch.dict('os.environ', {'HOME': './'}): + runtime_config = RuntimeConfig() + assert runtime_config.get_container_compression() == 'xz' + + @patch.object(RuntimeConfig, '_get_attribute') + @patch('kiwi.logger.log.warning') + def test_get_container_compression_invalid( + self, mock_warning, mock_get_attribute + ): + mock_get_attribute.return_value = 'foo' + assert self.runtime_config.get_container_compression() == 'xz' + mock_warning.assert_called_once_with( + 'Skipping invalid container compression: foo' + ) + + @patch.object(RuntimeConfig, '_get_attribute') + def test_get_container_compression_xz(self, mock_get_attribute): + mock_get_attribute.return_value = 'xz' + assert self.runtime_config.get_container_compression() == 'xz' + def test_get_iso_tool_category(self): assert self.runtime_config.get_iso_tool_category() == 'cdrtools' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/system_root_import_docker_test.py new/kiwi-9.15.2/test/unit/system_root_import_docker_test.py --- old/kiwi-9.15.1/test/unit/system_root_import_docker_test.py 2017-10-25 12:23:42.000000000 +0200 +++ new/kiwi-9.15.2/test/unit/system_root_import_docker_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -6,20 +6,22 @@ class TestRootImportDocker(object): - @patch('os.path.exists') @patch('kiwi.command.Command.run') @patch('kiwi.system.root_import.docker.Compress') @patch('kiwi.system.root_import.oci.mkdtemp') @patch('kiwi.system.uri.Defaults.is_buildservice_worker') - def test_extract_oci_image( + def test_extract_compressed_oci_image( self, mock_buildservice, mock_mkdtemp, mock_compress, mock_run, mock_exists ): mock_buildservice.return_value = False mock_exists.return_value = True uncompress = mock.Mock() - uncompress.uncompressed_filename = 'tmp_uncompressed' + uncompress.get_format = mock.Mock( + return_value='xz' + ) + uncompress.uncompressed_filename = 'tmp_uncompressed.tar' mock_compress.return_value = uncompress tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir'] @@ -36,7 +38,41 @@ mock_compress.assert_called_once_with('/image.tar.xz') uncompress.uncompress.assert_called_once_with(True) mock_run.assert_called_once_with([ - 'skopeo', 'copy', 'docker-archive:tmp_uncompressed', + 'skopeo', 'copy', 'docker-archive:tmp_uncompressed.tar', + 'oci:kiwi_layout_dir:base_layer' + ]) + + @patch('os.path.exists') + @patch('kiwi.command.Command.run') + @patch('kiwi.system.root_import.docker.Compress') + @patch('kiwi.system.root_import.oci.mkdtemp') + @patch('kiwi.system.uri.Defaults.is_buildservice_worker') + def test_extract_uncompressed_oci_image( + self, mock_buildservice, mock_mkdtemp, mock_compress, + mock_run, mock_exists + ): + mock_buildservice.return_value = False + mock_exists.return_value = True + uncompress = mock.Mock() + uncompress.get_format = mock.Mock( + return_value=None + ) + mock_compress.return_value = uncompress + tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir'] + + def call_mkdtemp(prefix): + return tmpdirs.pop() + + mock_mkdtemp.side_effect = call_mkdtemp + + with patch.dict('os.environ', {'HOME': '../data'}): + docker_import = RootImportDocker( + 'root_dir', Uri('file:///image.tar') + ) + docker_import.extract_oci_image() + mock_compress.assert_called_once_with('/image.tar') + mock_run.assert_called_once_with([ + 'skopeo', 'copy', 'docker-archive:/image.tar', 'oci:kiwi_layout_dir:base_layer' ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.15.1/test/unit/utils_compress_test.py new/kiwi-9.15.2/test/unit/utils_compress_test.py --- old/kiwi-9.15.1/test/unit/utils_compress_test.py 2017-09-15 10:37:16.000000000 +0200 +++ new/kiwi-9.15.2/test/unit/utils_compress_test.py 2018-05-15 14:43:16.000000000 +0200 @@ -23,7 +23,7 @@ @patch('kiwi.command.Command.run') def test_xz(self, mock_command): - self.compress.xz() + assert self.compress.xz() == 'some-file.xz' mock_command.assert_called_once_with( [ 'xz', '-f', '--threads=0', '--keep', @@ -34,7 +34,7 @@ @patch('kiwi.command.Command.run') def test_xz_with_custom_options(self, mock_command): - self.compress.xz(options=['foo', 'bar']) + assert self.compress.xz(options=['foo', 'bar']) == 'some-file.xz' mock_command.assert_called_once_with( [ 'xz', '-f', 'foo', 'bar', '--keep', @@ -45,7 +45,7 @@ @patch('kiwi.command.Command.run') def test_gzip(self, mock_command): - self.compress.gzip() + assert self.compress.gzip() == 'some-file.gz' mock_command.assert_called_once_with( ['gzip', '-f', '-9', '--keep', 'some-file'] )