From 284e7988a22bf743eb0de1c0380110cf6de12e7e Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 1/7] Fix minor requirements for EPEL10+ in test Signed-off-by: Diego Herrera --- diff --git a/test/test_commands.py b/test/test_commands.py index 8a90668..b2ae3fa 100644 --- a/test/test_commands.py +++ b/test/test_commands.py @@ -266,17 +266,27 @@ class TestLoadRpmDefines(CommandTestCase): self.assert_rpmdefines() + @patch('pyrpkg.Commands.kojisession', new_callable=PropertyMock) @patch('pyrpkg.Commands.branch_merge', new_callable=PropertyMock) - def test_load_epel10_dist_tag(self, branch_merge): + def test_load_epel10_dist_tag(self, branch_merge, kojisession): branch_merge.return_value = 'epel10' + self.cmd._kojisession = Mock() + koji_session = kojisession.return_value + koji_session.getBuildConfig.return_value = { + # minimal subset of the real koji response + 'extra': { + 'rpm.macro.distcore': '.el10_3', + }, + } + self.cmd.load_rpmdefines() self.assertEqual('10', self.cmd._distval) self.assertEqual('rhel', self.cmd._distvar) - self.assertEqual('el10', self.cmd._disttag) + self.assertEqual('el10_3', self.cmd._disttag) self.assertEqual('epel-10-i686', self.cmd.mockconfig) - self.assertEqual('epel10-override', self.cmd.override) + self.assertEqual('epel10.3-override', self.cmd.override) self.assertTrue(hasattr(self.cmd, '_distunset')) self.assert_rpmdefines() From 083d3b35734805ab0606adfec525d93e0d6bf33f Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 2/7] Use minor value from koji when no minor in branch name Signed-off-by: Diego Herrera --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index 2d3ed7e..9edd11f 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -74,17 +74,33 @@ class Commands(pyrpkg.Commands): self.mockconfig = 'fedora-%s-%s' % (self._distval, self.localarch) self.override = 'f%s-override' % self._distval self._distunset = 'rhel' + # Works until RHEL 10 elif re.match(r'el\d$', branch) or \ - re.match(r'epel\d+(?:\.\d+)?$', branch): - major, minor = re.findall(r'(\d+)(?:\.(\d+))?', branch)[0] + re.match(r'epel\d$', branch): + self._distval = branch.split('el')[1] + self._distvar = 'rhel' + self._disttag = 'el%s' % self._distval + self.mockconfig = 'epel-%s-%s' % (self._distval, self.localarch) + self.override = 'epel%s-override' % self._distval + self._distunset = 'fedora' + # EPEL 10+ without minor + elif re.match(r'epel\d\d$', branch): + macros = self._get_build_macros('epel%s' % branch.split('el')[1]) + major, minor = re.findall(r'.el(\d+)_(\d+)$', macros['distcore'])[0] + self._distval = major + self._distvar = 'rhel' + self._disttag = macros['distcore'].split('.')[1] + self.mockconfig = 'epel-%s-%s' % (major, self.localarch) + self.override = 'epel%s.%s-override' % (major, minor) + self._distunset = 'fedora' + # EPEL 10+ with minor + elif re.match(r'epel\d\d+\.\d+$', branch): + major, minor = re.findall(r'epel(\d+)\.(\d+)$', branch)[0] self._distval = major self._distvar = 'rhel' - self._disttag = 'el%s' % major if minor == '' \ - else 'el%s_%s' % (major, minor) - self.mockconfig = 'epel-%s-%s' % (major, self.localarch) if minor == '' \ - else 'epel-%s.%s-%s' % (major, minor, self.localarch) - self.override = 'epel%s-override' % self._distval if minor == '' \ - else 'epel%s.%s-override' % (major, minor) + self._disttag = 'el%s_%s' % (major, minor) + self.mockconfig = 'epel-%s.%s-%s' % (major, minor, self.localarch) + self.override = 'epel%s.%s-override' % (major, minor) self._distunset = 'fedora' elif re.match(r'epel\d+-next$', branch): self._distval = re.search(r'\d+', branch).group(0) From 81ba9bb99cc93db6467c6d27ce6f723642100ef8 Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 3/7] Fix EPEL10 branch expression to cover 2 or more digits. Signed-off-by: Diego Herrera --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index 9edd11f..4e72dbd 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -84,7 +84,7 @@ class Commands(pyrpkg.Commands): self.override = 'epel%s-override' % self._distval self._distunset = 'fedora' # EPEL 10+ without minor - elif re.match(r'epel\d\d$', branch): + elif re.match(r'epel\d{2,}$', branch): macros = self._get_build_macros('epel%s' % branch.split('el')[1]) major, minor = re.findall(r'.el(\d+)_(\d+)$', macros['distcore'])[0] self._distval = major @@ -94,7 +94,7 @@ class Commands(pyrpkg.Commands): self.override = 'epel%s.%s-override' % (major, minor) self._distunset = 'fedora' # EPEL 10+ with minor - elif re.match(r'epel\d\d+\.\d+$', branch): + elif re.match(r'epel\d{2,}\.\d+$', branch): major, minor = re.findall(r'epel(\d+)\.(\d+)$', branch)[0] self._distval = major self._distvar = 'rhel' From 54079bf1121ac0eaebbb598888333c3a36d1508f Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 4/7] Get macros from epel-candidate build target. Signed-off-by: Diego Herrera --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index 4e72dbd..e9d41b2 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -85,7 +85,7 @@ class Commands(pyrpkg.Commands): self._distunset = 'fedora' # EPEL 10+ without minor elif re.match(r'epel\d{2,}$', branch): - macros = self._get_build_macros('epel%s' % branch.split('el')[1]) + macros = self._get_build_macros('epel%s-candidate' % branch.split('el')[1]) major, minor = re.findall(r'.el(\d+)_(\d+)$', macros['distcore'])[0] self._distval = major self._distvar = 'rhel' From ff03aa603fb505824d0132561938bd78dd743b9c Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 5/7] Improvements on string parsing Signed-off-by: Diego Herrera --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index e9d41b2..3d54c56 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -85,17 +85,17 @@ class Commands(pyrpkg.Commands): self._distunset = 'fedora' # EPEL 10+ without minor elif re.match(r'epel\d{2,}$', branch): - macros = self._get_build_macros('epel%s-candidate' % branch.split('el')[1]) - major, minor = re.findall(r'.el(\d+)_(\d+)$', macros['distcore'])[0] + macros = self._get_build_macros('epel%s-candidate' % branch[4:]) + major, minor = macros['distcore'][3:].split('_') self._distval = major self._distvar = 'rhel' - self._disttag = macros['distcore'].split('.')[1] + self._disttag = macros['distcore'][1:] self.mockconfig = 'epel-%s-%s' % (major, self.localarch) self.override = 'epel%s.%s-override' % (major, minor) self._distunset = 'fedora' # EPEL 10+ with minor elif re.match(r'epel\d{2,}\.\d+$', branch): - major, minor = re.findall(r'epel(\d+)\.(\d+)$', branch)[0] + major, minor = branch[4:].split('.') self._distval = major self._distvar = 'rhel' self._disttag = 'el%s_%s' % (major, minor) From 79cee4a69457251374d4fcaf28cdde3a8d1e4030 Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 6/7] Add tests cases for runtime_disttag removal when working with epel10 Signed-off-by: Diego Herrera --- diff --git a/test/test_commands.py b/test/test_commands.py index b2ae3fa..d160da9 100644 --- a/test/test_commands.py +++ b/test/test_commands.py @@ -369,6 +369,80 @@ class TestLoadRpmDefines(CommandTestCase): self.assert_rpmdefines(extra_rpmdefines) +class TestLoadRpmDefinesRuntimes(CommandTestCase): + """Test Commands.load_rpmdefines""" + + def setUp(self): + super(TestLoadRpmDefinesRuntimes, self).setUp() + + self.localarch = patch( + 'pyrpkg.Commands.localarch', + new_callable=PropertyMock, + return_value='i686') + self.localarch.start() + + self.cmd = self.make_commands() + + def tearDown(self): + self.localarch.stop() + super(TestLoadRpmDefinesRuntimes, self).tearDown() + + def assert_rpmdefines(self, extra_rpmdefines=[]): + """Assert Commands._rpmdefines after calling load_rpmdefines""" + expected_rpmdefines = [ + "--define", "_sourcedir %s" % self.cmd.layout.sourcedir, + "--define", "_specdir %s" % self.cmd.layout.specdir, + "--define", "_builddir %s" % self.cmd.layout.builddir, + "--define", "_srcrpmdir %s" % self.cmd.layout.srcrpmdir, + "--define", "_rpmdir %s" % self.cmd.layout.rpmdir, + "--define", "_rpmfilename %s" % self.cmd.layout.rpmfilename, + "--define", "dist %%{?distprefix}.%s" % self.cmd._disttag, + "--define", "%s %s" % (self.cmd._distvar, self.cmd._distval), + "--eval", "%%undefine %s" % self.cmd._distunset, + "--define", "%s 1" % self.cmd._disttag.replace(".", "_") + ] + expected_rpmdefines.extend(extra_rpmdefines) + self.assertEqual(expected_rpmdefines, self.cmd._rpmdefines) + + @patch('fedpkg.Commands._determine_runtime_env') + @patch('pyrpkg.Commands.branch_merge', new_callable=PropertyMock) + def test_load_fc40_on_el10_8_runtime(self, branch_merge, _determine_runtime_env): + _determine_runtime_env.return_value = 'fc40' + branch_merge.return_value = 'epel10.8' + + self.cmd.load_rpmdefines() + extra_rpmdefines = [ + "--eval", "%%undefine %s" % self.cmd._runtime_disttag] + self.assert_rpmdefines(extra_rpmdefines) + + @patch('fedpkg.Commands._determine_runtime_env') + @patch('pyrpkg.Commands.kojisession', new_callable=PropertyMock) + @patch('pyrpkg.Commands.branch_merge', new_callable=PropertyMock) + def test_load_epel10_on_el10_runtime(self, branch_merge, kojisession, _determine_runtime_env): + _determine_runtime_env.return_value = 'el10' + branch_merge.return_value = 'epel10' + + self.cmd._kojisession = Mock() + koji_session = kojisession.return_value + koji_session.getBuildConfig.return_value = { + # minimal subset of the real koji response + 'extra': { + 'rpm.macro.distcore': '.el10_8', + }, + } + self.cmd.load_rpmdefines() + self.assert_rpmdefines() + + @patch('fedpkg.Commands._determine_runtime_env') + @patch('pyrpkg.Commands.branch_merge', new_callable=PropertyMock) + def test_load_epel10_4_on_el10_runtime(self, branch_merge, _determine_runtime_env): + _determine_runtime_env.return_value = 'el10' + branch_merge.return_value = 'epel10.4' + + self.cmd.load_rpmdefines() + self.assert_rpmdefines() + + class TestFindRawhideBranch(CommandTestCase): """Test Commands._findrawhidebranch""" From 7559b4cdb93d5a92c6b14b28b09cabebcc5965f9 Mon Sep 17 00:00:00 2001 From: Diego Herrera Date: Sep 18 2024 03:57:05 +0000 Subject: [PATCH 7/7] Handle rhel runtimes when minor version exists in disttag Signed-off-by: Diego Herrera --- diff --git a/fedpkg/__init__.py b/fedpkg/__init__.py index 3d54c56..7683f45 100644 --- a/fedpkg/__init__.py +++ b/fedpkg/__init__.py @@ -177,10 +177,15 @@ class Commands(pyrpkg.Commands): "--define", "%s 1" % self._disttag.replace(".", "_")] # TODO: consider removing macro "%s 1; it has unknown/dubious functionality" + # If the runtime is known, and is different from + # the target, we need to unset the _runtime_disttag if self._runtime_disttag: - if self._disttag != self._runtime_disttag: - # This means that the runtime is known, and is different from - # the target, so we need to unset the _runtime_disttag + # In the case of rhel like runtimes, only the major needs to be different + if re.match(r'^el\d', self._runtime_disttag): + if not self._disttag.startswith(self._runtime_disttag): + self._rpmdefines.extend(["--eval", "%%undefine %s" % + self._runtime_disttag]) + elif self._disttag != self._runtime_disttag: self._rpmdefines.extend(["--eval", "%%undefine %s" % self._runtime_disttag])