Backport patches for PR#790,791,796
Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
This commit is contained in:
parent
fcabf963e7
commit
a726c6a0b3
120
790.patch
Normal file
120
790.patch
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
From 1a10a1fe8333e16fa448d96377baff0aab0ee780 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Patrick Uiterwijk <patrick@puiterwijk.org>
|
||||||
|
Date: Nov 06 2017 14:17:33 +0000
|
||||||
|
Subject: 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 <patrick@puiterwijk.org>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/pungi/checks.py b/pungi/checks.py
|
||||||
|
index 1f31fd9..cd1940c 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 2860823..9b8984b 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 c6c4f25..0ed76e8 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 678590a..0162e17 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 f88eafd..05804ac 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')
|
||||||
|
|
66
791.patch
Normal file
66
791.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From 1dbd0248d4ff9b8417b51d9692f8705022740e18 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Patrick Uiterwijk <patrick@puiterwijk.org>
|
||||||
|
Date: Nov 06 2017 15:14:44 +0000
|
||||||
|
Subject: Implement version.compose_id version generator
|
||||||
|
|
||||||
|
|
||||||
|
Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/pungi/util.py b/pungi/util.py
|
||||||
|
index 0162e17..0607b6c 100644
|
||||||
|
--- a/pungi/util.py
|
||||||
|
+++ b/pungi/util.py
|
||||||
|
@@ -782,9 +782,12 @@ def version_generator(compose, gen):
|
||||||
|
"""
|
||||||
|
if gen == '!OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN':
|
||||||
|
return '%s.%s' % (compose.image_version, compose.image_release)
|
||||||
|
- if gen == '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN':
|
||||||
|
+ elif gen == '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN':
|
||||||
|
return compose.image_release
|
||||||
|
- if gen and gen[0] == '!':
|
||||||
|
+ elif gen == '!RELEASE_FROM_VERSION_COMPOSE_ID':
|
||||||
|
+ return '%s.%s' % (compose.ci_base.release.version,
|
||||||
|
+ compose.ci_base.id)
|
||||||
|
+ elif gen and gen[0] == '!':
|
||||||
|
raise RuntimeError("Unknown version generator '%s'" % gen)
|
||||||
|
return gen
|
||||||
|
|
||||||
|
diff --git a/tests/test_util.py b/tests/test_util.py
|
||||||
|
index 05804ac..3209676 100644
|
||||||
|
--- a/tests/test_util.py
|
||||||
|
+++ b/tests/test_util.py
|
||||||
|
@@ -601,6 +601,20 @@ class GetRepoFuncsTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
|
class TestVersionGenerator(unittest.TestCase):
|
||||||
|
+ def setUp(self):
|
||||||
|
+ ci = mock.MagicMock()
|
||||||
|
+ ci.respin = 0
|
||||||
|
+ ci.id = 'RHEL-8.0-20180101.0'
|
||||||
|
+ ci.release.version = '8'
|
||||||
|
+ ci.date = '20160101'
|
||||||
|
+ ci.type = 'nightly'
|
||||||
|
+ ci.type_suffix = ''
|
||||||
|
+ ci.label = 'RC-1.0'
|
||||||
|
+ ci.label_major_version = '1'
|
||||||
|
+
|
||||||
|
+ self.compose = mock.MagicMock()
|
||||||
|
+ self.compose.ci_base = ci
|
||||||
|
+
|
||||||
|
def test_unknown_generator(self):
|
||||||
|
compose = mock.Mock()
|
||||||
|
with self.assertRaises(RuntimeError) as ctx:
|
||||||
|
@@ -617,6 +631,10 @@ class TestVersionGenerator(unittest.TestCase):
|
||||||
|
compose = mock.Mock()
|
||||||
|
self.assertEqual(util.version_generator(compose, None), None)
|
||||||
|
|
||||||
|
+ def test_release_from_version_compose_id(self):
|
||||||
|
+ self.assertEqual(util.version_generator(self.compose, '!RELEASE_FROM_VERSION_COMPOSE_ID'),
|
||||||
|
+ '8.RHEL-8.0-20180101.0')
|
||||||
|
+
|
||||||
|
|
||||||
|
class TestTZOffset(unittest.TestCase):
|
||||||
|
@mock.patch('time.daylight', new=False)
|
||||||
|
|
96
796.patch
Normal file
96
796.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
From 8181c5be48c736dadb1d2733306ab8edb8a2d05e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Patrick Uiterwijk <puiterwijk@redhat.com>
|
||||||
|
Date: Nov 10 2017 10:14:11 +0000
|
||||||
|
Subject: Turn COMPOSE_ID version generator into DATE_RESPIN
|
||||||
|
|
||||||
|
|
||||||
|
Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/doc/configuration.rst b/doc/configuration.rst
|
||||||
|
index fd5b67b..077457c 100644
|
||||||
|
--- a/doc/configuration.rst
|
||||||
|
+++ b/doc/configuration.rst
|
||||||
|
@@ -950,17 +950,17 @@ Version and release values for certain artifacts can be generated automatically
|
||||||
|
based on release version, compose label, date, type and respin. This can be
|
||||||
|
used to shorten the config and keep it the same for multiple uses.
|
||||||
|
|
||||||
|
-+----------------------------+-------------------+--------------+------------------+
|
||||||
|
-| Compose ID | Label | Version | Release |
|
||||||
|
-+============================+===================+==============+==================+
|
||||||
|
-| ``F-Rawhide-20170406.n.0`` | ``-`` | ``Rawhide`` | ``20170406.n.0`` |
|
||||||
|
-+----------------------------+-------------------+--------------+------------------+
|
||||||
|
-| ``F-26-20170329.1`` | ``Alpha-1.6`` | ``26_Alpha`` | ``1.6`` |
|
||||||
|
-+----------------------------+-------------------+--------------+------------------+
|
||||||
|
-| ``F-Atomic-25-20170407.0`` | ``RC-20170407.0`` | ``25`` | ``20170407.0`` |
|
||||||
|
-+----------------------------+-------------------+--------------+------------------+
|
||||||
|
-| ``F-Atomic-25-20170407.0`` | ``-`` | ``25`` | ``20170407.0`` |
|
||||||
|
-+----------------------------+-------------------+--------------+------------------+
|
||||||
|
++----------------------------+-------------------+--------------+--------------+--------+------------------+
|
||||||
|
+| Compose ID | Label | Version | Date | Respin | Release |
|
||||||
|
++============================+===================+==============+==============+========+==================+
|
||||||
|
+| ``F-Rawhide-20170406.n.0`` | ``-`` | ``Rawhide`` | ``20170406`` | ``0`` | ``20170406.n.0`` |
|
||||||
|
++----------------------------+-------------------+--------------+--------------+--------+------------------+
|
||||||
|
+| ``F-26-20170329.1`` | ``Alpha-1.6`` | ``26_Alpha`` | ``20170329`` | ``1`` | ``1.6`` |
|
||||||
|
++----------------------------+-------------------+--------------+--------------+--------+------------------+
|
||||||
|
+| ``F-Atomic-25-20170407.0`` | ``RC-20170407.0`` | ``25`` | ``20170407`` | ``0`` | ``20170407.0`` |
|
||||||
|
++----------------------------+-------------------+--------------+--------------+--------+------------------+
|
||||||
|
+| ``F-Atomic-25-20170407.0`` | ``-`` | ``25`` | ``20170407`` | ``0`` | ``20170407.0`` |
|
||||||
|
++----------------------------+-------------------+--------------+--------------+--------+------------------+
|
||||||
|
|
||||||
|
All non-``RC`` milestones from label get appended to the version. For release
|
||||||
|
either label is used or date, type and respin.
|
||||||
|
@@ -1230,6 +1230,8 @@ repository with a new commit.
|
||||||
|
* ``version`` -- (*str*) Version string to be added as versioning metadata.
|
||||||
|
If this option is set to ``!OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN``,
|
||||||
|
a value will be generated automatically as ``$VERSION.$RELEASE``.
|
||||||
|
+ If this option is set to ``!VERSION_FROM_VERSION_DATE_RESPIN``,
|
||||||
|
+ a value will be generated automatically as ``$VERSION.$DATE.$RESPIN``.
|
||||||
|
:ref:`See how those values are created <auto-version>`.
|
||||||
|
* ``tag_ref`` -- (*bool*, default ``True``) If set to ``False``, a git
|
||||||
|
reference will not be created.
|
||||||
|
diff --git a/pungi/util.py b/pungi/util.py
|
||||||
|
index 0607b6c..2d2df82 100644
|
||||||
|
--- a/pungi/util.py
|
||||||
|
+++ b/pungi/util.py
|
||||||
|
@@ -784,9 +784,10 @@ def version_generator(compose, gen):
|
||||||
|
return '%s.%s' % (compose.image_version, compose.image_release)
|
||||||
|
elif gen == '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN':
|
||||||
|
return compose.image_release
|
||||||
|
- elif gen == '!RELEASE_FROM_VERSION_COMPOSE_ID':
|
||||||
|
- return '%s.%s' % (compose.ci_base.release.version,
|
||||||
|
- compose.ci_base.id)
|
||||||
|
+ elif gen == '!VERSION_FROM_VERSION_DATE_RESPIN':
|
||||||
|
+ return '%s.%s.%s' % (compose.ci_base.release.version,
|
||||||
|
+ compose.ci_base.date,
|
||||||
|
+ compose.compose_respin)
|
||||||
|
elif gen and gen[0] == '!':
|
||||||
|
raise RuntimeError("Unknown version generator '%s'" % gen)
|
||||||
|
return gen
|
||||||
|
diff --git a/tests/test_util.py b/tests/test_util.py
|
||||||
|
index 3209676..e0dd2b1 100644
|
||||||
|
--- a/tests/test_util.py
|
||||||
|
+++ b/tests/test_util.py
|
||||||
|
@@ -614,6 +614,7 @@ class TestVersionGenerator(unittest.TestCase):
|
||||||
|
|
||||||
|
self.compose = mock.MagicMock()
|
||||||
|
self.compose.ci_base = ci
|
||||||
|
+ self.compose.compose_respin = 0
|
||||||
|
|
||||||
|
def test_unknown_generator(self):
|
||||||
|
compose = mock.Mock()
|
||||||
|
@@ -631,9 +632,9 @@ class TestVersionGenerator(unittest.TestCase):
|
||||||
|
compose = mock.Mock()
|
||||||
|
self.assertEqual(util.version_generator(compose, None), None)
|
||||||
|
|
||||||
|
- def test_release_from_version_compose_id(self):
|
||||||
|
- self.assertEqual(util.version_generator(self.compose, '!RELEASE_FROM_VERSION_COMPOSE_ID'),
|
||||||
|
- '8.RHEL-8.0-20180101.0')
|
||||||
|
+ def test_release_from_version_date_respin(self):
|
||||||
|
+ self.assertEqual(util.version_generator(self.compose, '!VERSION_FROM_VERSION_DATE_RESPIN'),
|
||||||
|
+ '8.20160101.0')
|
||||||
|
|
||||||
|
|
||||||
|
class TestTZOffset(unittest.TestCase):
|
||||||
|
|
12
pungi.spec
12
pungi.spec
@ -1,6 +1,6 @@
|
|||||||
Name: pungi
|
Name: pungi
|
||||||
Version: 4.1.20
|
Version: 4.1.20
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Distribution compose tool
|
Summary: Distribution compose tool
|
||||||
|
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
@ -8,6 +8,9 @@ License: GPLv2
|
|||||||
URL: https://pagure.io/pungi
|
URL: https://pagure.io/pungi
|
||||||
Source0: https://pagure.io/releases/%{name}/%{name}-%{version}.tar.bz2
|
Source0: https://pagure.io/releases/%{name}/%{name}-%{version}.tar.bz2
|
||||||
Patch0: 0001-gather-get_packages_to_gather-returns-a-tuple.patch
|
Patch0: 0001-gather-get_packages_to_gather-returns-a-tuple.patch
|
||||||
|
Patch1: https://pagure.io/pungi/pull-request/790.patch
|
||||||
|
Patch2: https://pagure.io/pungi/pull-request/791.patch
|
||||||
|
Patch3: https://pagure.io/pungi/pull-request/796.patch
|
||||||
BuildRequires: python-nose, python-mock
|
BuildRequires: python-nose, python-mock
|
||||||
BuildRequires: python-devel, python-setuptools, python2-productmd >= 1.3
|
BuildRequires: python-devel, python-setuptools, python2-productmd >= 1.3
|
||||||
BuildRequires: python-lockfile, kobo-rpmlib, createrepo_c
|
BuildRequires: python-lockfile, kobo-rpmlib, createrepo_c
|
||||||
@ -101,6 +104,9 @@ notification to Fedora Message Bus.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%{__python} setup.py build
|
%{__python} setup.py build
|
||||||
@ -155,6 +161,10 @@ cd tests && ./test_compose.sh
|
|||||||
%{_bindir}/%{name}-wait-for-signed-ostree-handler
|
%{_bindir}/%{name}-wait-for-signed-ostree-handler
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Nov 22 2017 Patrick Uiterwijk <puiterwijk@redhat.com> - 4.1.20-3
|
||||||
|
- Backport patch for PR#790 - old_composes per release type
|
||||||
|
- Backport patch for PR#791,796 - implement DATE_RESPIN version generator
|
||||||
|
|
||||||
* Tue Nov 21 2017 Lubomír Sedlář <lsedlar@redhat.com> - 4.1.20-2
|
* Tue Nov 21 2017 Lubomír Sedlář <lsedlar@redhat.com> - 4.1.20-2
|
||||||
- Fix crash in modular compose
|
- Fix crash in modular compose
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user