diff --git a/doc/configuration.rst b/doc/configuration.rst index c3a7987a..5a9cbc94 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -1429,7 +1429,7 @@ Media Checksums Settings * ``type`` * ``type_suffix`` * ``version`` - * ``version`` + * ``dirname`` (only if ``media_checksum_one_file`` is enabled) For example, for Fedora the prefix should be ``%(release_short)s-%(variant)s-%(version)s-%(date)s%(type_suffix)s.%(respin)s``. diff --git a/pungi/phases/image_checksum.py b/pungi/phases/image_checksum.py index 77394b96..0bdaf448 100644 --- a/pungi/phases/image_checksum.py +++ b/pungi/phases/image_checksum.py @@ -60,10 +60,10 @@ class ImageChecksumPhase(PhaseBase): images.setdefault((variant, arch, path), set()).add(image) return images - def _get_base_filename(self, variant, arch): + def _get_base_filename(self, variant, arch, **kwargs): base_checksum_name = self.compose.conf['media_checksum_base_filename'] if base_checksum_name: - substs = get_format_substs(self.compose, variant=variant, arch=arch) + substs = get_format_substs(self.compose, variant=variant, arch=arch, **kwargs) base_checksum_name = (base_checksum_name % substs).format(**substs) base_checksum_name += '-' return base_checksum_name @@ -74,7 +74,7 @@ class ImageChecksumPhase(PhaseBase): def _compute_checksums(results, cache, variant, arch, path, images, - checksum_types, base_checksum_name, one_file): + checksum_types, base_checksum_name_gen, one_file): for image in images: filename = os.path.basename(image.path) full_path = os.path.join(path, filename) @@ -98,20 +98,23 @@ def _compute_checksums(results, cache, variant, arch, path, images, results[checksum_filename].add((filename, filesize, checksum, digest)) if one_file: - checksum_filename = os.path.join(path, base_checksum_name + 'CHECKSUM') + dirname = os.path.basename(path) + base_checksum_name = base_checksum_name_gen(variant, arch, dirname=dirname) + checksum_filename = base_checksum_name + 'CHECKSUM' else: - checksum_filename = os.path.join(path, '%s%sSUM' % (base_checksum_name, checksum.upper())) + base_checksum_name = base_checksum_name_gen(variant, arch) + checksum_filename = '%s%sSUM' % (base_checksum_name, checksum.upper()) + checksum_path = os.path.join(path, checksum_filename) - results[checksum_filename].add((filename, filesize, checksum, digest)) + results[checksum_path].add((filename, filesize, checksum, digest)) def make_checksums(topdir, im, checksum_types, one_file, base_checksum_name_gen): results = defaultdict(set) cache = {} for (variant, arch, path), images in get_images(topdir, im).iteritems(): - base_checksum_name = base_checksum_name_gen(variant, arch) _compute_checksums(results, cache, variant, arch, path, images, - checksum_types, base_checksum_name, one_file) + checksum_types, base_checksum_name_gen, one_file) for file in results: dump_checksums(file, results[file]) diff --git a/tests/helpers.py b/tests/helpers.py index 165c91ff..d6380500 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -194,4 +194,4 @@ def load_config(data={}, **kwargs): def load_bin(name): - return imp.load_source('pungi_cli_fake_' + name, os.path.dirname(__file__) + "/../bin/" + name) \ No newline at end of file + return imp.load_source('pungi_cli_fake_' + name, os.path.dirname(__file__) + "/../bin/" + name) diff --git a/tests/test_imagechecksumphase.py b/tests/test_imagechecksumphase.py index 0515552c..e60d212c 100644 --- a/tests/test_imagechecksumphase.py +++ b/tests/test_imagechecksumphase.py @@ -95,7 +95,7 @@ class TestImageChecksumPhase(PungiTestCase): compose = DummyCompose(self.topdir, { 'media_checksums': ['sha256'], 'media_checksum_one_file': True, - 'media_checksum_base_filename': '%(release_short)s-%(variant)s-%(version)s-%(date)s%(type_suffix)s.%(respin)s_%(label)s' + 'media_checksum_base_filename': '%(release_short)s-%(variant)s-%(version)s-%(date)s%(type_suffix)s.%(respin)s_%(label)s-%(dirname)s' }) compose.compose_label = 'Alpha-1.0' @@ -107,7 +107,7 @@ class TestImageChecksumPhase(PungiTestCase): phase.run() dump_checksums.assert_called_once_with( - self.topdir + '/compose/Client/i386/iso/test-Client-1.0-20151203.t.0_Alpha-1.0-CHECKSUM', + self.topdir + '/compose/Client/i386/iso/test-Client-1.0-20151203.t.0_Alpha-1.0-iso-CHECKSUM', set([('image.iso', 123, 'sha256', 'cafebabe')])) cc.assert_called_once_with(self.topdir + '/compose/Client/i386/iso/image.iso', ['sha256']) compose.image.add_checksum.assert_called_once_with(None, 'sha256', 'cafebabe')