From 1a10a1fe8333e16fa448d96377baff0aab0ee780 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: Mon, 6 Nov 2017 14:56:08 +0100 Subject: [PATCH] Optionally do old_compose per release type This would make sure that e.g. "updates" composes don't try to use "updates-testing" as an old_compose_path, which would create practically useless deltarpms and for no repodata reuse at all. Signed-off-by: Patrick Uiterwijk --- pungi/checks.py | 4 ++++ pungi/phases/createrepo.py | 1 + pungi/phases/pkgset/common.py | 9 ++++++++- pungi/util.py | 12 ++++++++++-- tests/test_util.py | 10 ++++++++++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/pungi/checks.py b/pungi/checks.py index 1f31fd90..cd1940c4 100644 --- a/pungi/checks.py +++ b/pungi/checks.py @@ -626,6 +626,10 @@ def make_schema(): "enum": ["yum", "dnf"], }, + "old_composes_per_release_type": { + "type": "boolean", + "default": False, + }, "hashed_directories": { "type": "boolean", "default": False, diff --git a/pungi/phases/createrepo.py b/pungi/phases/createrepo.py index 28608235..9b8984b3 100644 --- a/pungi/phases/createrepo.py +++ b/pungi/phases/createrepo.py @@ -275,6 +275,7 @@ def _get_old_package_dirs(compose, repo_dir): compose.old_composes, compose.ci_base.release.short, compose.ci_base.release.version, + compose.ci_base.release.type_suffix if compose.conf['old_composes_per_release_type'] else None, compose.ci_base.base_product.short if compose.ci_base.release.is_layered else None, compose.ci_base.base_product.version if compose.ci_base.release.is_layered else None, allowed_statuses=['FINISHED', 'FINISHED_INCOMPLETE'], diff --git a/pungi/phases/pkgset/common.py b/pungi/phases/pkgset/common.py index c6c4f25d..0ed76e8b 100644 --- a/pungi/phases/pkgset/common.py +++ b/pungi/phases/pkgset/common.py @@ -55,7 +55,14 @@ def create_global_repo(compose, path_prefix): old_compose_path = None update_md_path = None if compose.old_composes: - old_compose_path = find_old_compose(compose.old_composes, compose.conf["release_short"], compose.conf["release_version"], compose.conf.get("base_product_short"), compose.conf.get("base_product_version")) + old_compose_path = find_old_compose( + compose.old_composes, + compose.ci_base.release.short, + compose.ci_base.release.version, + compose.ci_base.release.type_suffix if compose.conf['old_composes_per_release_type'] else None, + compose.ci_base.base_product.short if compose.ci_base.release.is_layered else None, + compose.ci_base.base_product.version if compose.ci_base.release.is_layered else None, + ) if old_compose_path is None: compose.log_info("No suitable old compose found in: %s" % compose.old_composes) else: diff --git a/pungi/util.py b/pungi/util.py index 678590a5..0162e17b 100644 --- a/pungi/util.py +++ b/pungi/util.py @@ -395,8 +395,8 @@ def get_file_size(path): def find_old_compose(old_compose_dirs, release_short, release_version, - base_product_short=None, base_product_version=None, - allowed_statuses=None): + release_type_suffix=None, base_product_short=None, + base_product_version=None, allowed_statuses=None): allowed_statuses = allowed_statuses or ("FINISHED", "FINISHED_INCOMPLETE", "DOOMED") composes = [] @@ -417,6 +417,8 @@ def find_old_compose(old_compose_dirs, release_short, release_version, # TODO: read .composeinfo pattern = "%s-%s" % (release_short, release_version) + if release_type_suffix: + pattern += release_type_suffix if base_product_short: pattern += "-%s" % base_product_short if base_product_version: @@ -425,6 +427,12 @@ def find_old_compose(old_compose_dirs, release_short, release_version, if not i.startswith(pattern): continue + suffix = i[len(pattern):] + if release_type_suffix and (len(suffix) < 2 or not suffix[1].isdigit()): + # This covers the case where we are looking for -updates, but there + # is an updates-testing as well. + continue + path = os.path.join(compose_dir, i) if not os.path.isdir(path): continue diff --git a/tests/test_util.py b/tests/test_util.py index f88eafd5..05804ac2 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -253,6 +253,16 @@ class TestFindOldCompose(unittest.TestCase): old = util.find_old_compose(self.tmp_dir, 'Fedora', 'Rawhide') self.assertEqual(old, self.tmp_dir + '/Fedora-Rawhide-20160229.1') + def test_find_correct_type(self): + touch(self.tmp_dir + '/Fedora-26-updates-20160229.0/STATUS', 'FINISHED') + touch(self.tmp_dir + '/Fedora-26-updates-testing-20160229.0/STATUS', 'FINISHED') + old = util.find_old_compose(self.tmp_dir, 'Fedora', '26', '-updates') + self.assertEqual(old, self.tmp_dir + '/Fedora-26-updates-20160229.0') + old = util.find_old_compose(self.tmp_dir, 'Fedora', '26', '-updates-testing') + self.assertEqual(old, self.tmp_dir + '/Fedora-26-updates-testing-20160229.0') + old = util.find_old_compose(self.tmp_dir, 'Fedora', '26') + self.assertEqual(old, self.tmp_dir + '/Fedora-26-updates-testing-20160229.0') + def test_find_latest_with_two_digit_respin(self): touch(self.tmp_dir + '/Fedora-Rawhide-20160228.n.9/STATUS', 'FINISHED') touch(self.tmp_dir + '/Fedora-Rawhide-20160228.n.10/STATUS', 'FINISHED')