From 15e3a336df097f379dd28ac171a366d50ce82e6c Mon Sep 17 00:00:00 2001 From: David Shea Date: Dec 19 2018 18:07:55 +0000 Subject: Expand rpm macros when using the release in a path The release tag commonly uses system-configured macros (%{dist}). In order to match the paths used by rpmbuild, evaluate the release tag with rpm any time it is used to generate a path. The name, version, and arch tags could also potentially contain macros, but it makes less sense for these fields to use macros that are not dependent on definitions within the spec file itself. --- diff --git a/rpmfluff.py b/rpmfluff.py index 96e54fa..95a0597 100644 --- a/rpmfluff.py +++ b/rpmfluff.py @@ -54,6 +54,13 @@ def get_rpm_header(path): finally: os.close(fd) +def expand_macros(expr): + # If the expression contains RPM macros, return the expanded string + if '%' in expr: + return subprocess.check_output(['rpm', '-E', expr], universal_newlines=True).strip() + else: + return expr + class Check: """ Something that ought to hold for the built RPMs @@ -657,7 +664,7 @@ class SimpleRpmBuild(RpmBuild): self.section_changelog = defaultChangelogFormat%(version, release) def get_base_dir(self): - return "test-rpmbuild-%s-%s-%s"%(self.name, self.version, self.release) + return "test-rpmbuild-%s-%s-%s"%(self.name, self.version, expand_macros(self.release)) def get_subpackage_names(self): """ @@ -874,7 +881,7 @@ class SimpleRpmBuild(RpmBuild): else: archSuffix=arch - builtRpmName="%s-%s-%s.%s.rpm"%(name, self.version, self.release, archSuffix) + builtRpmName="%s-%s-%s.%s.rpm"%(name, self.version, expand_macros(self.release), archSuffix) if arch=="SRPMS": builtRpmDir = self.get_srpms_dir() else: @@ -1103,7 +1110,7 @@ class SimpleRpmBuild(RpmBuild): content = '' for i in range(size): content = content + chr(random.randrange(32, 127)) - name = "%s-%s-%s-%s-%s-%s.txt" % (self.epoch, self.name, self.version, self.release, self.get_build_archs()[0], len(self.sources)) + name = "%s-%s-%s-%s-%s-%s.txt" % (self.epoch, self.name, self.version, expand_macros(self.release), self.get_build_archs()[0], len(self.sources)) self.add_installed_file(installPath = 'usr/share/doc/%s' % name, sourceFile = SourceFile(name, content), isDoc=True) @@ -1839,6 +1846,13 @@ class TestSimpleRpmBuild(unittest.TestCase): srpmHdr = self.rpmbuild.get_built_srpm_header() self.assertEquals(3, srpmHdr[rpm.RPMTAG_EPOCH]) + def test_dist_tag(self): + """Ensuring that macros in the release tag work""" + self.rpmbuild.release = '1%{?dist}' + self.rpmbuild.make() + + self.assert_is_file(self.rpmbuild.get_built_rpm(expectedArch)) + class YumRepoBuildTests(unittest.TestCase): def assert_is_dir(self, dirname):