From 5afdda71e2583a9add10ec48822963ebd1febc8d Mon Sep 17 00:00:00 2001 From: Tomas Orsava Date: Mon, 29 Nov 2021 12:31:48 +0100 Subject: [PATCH] From `python3-foo` packages automatically generate `python3.X-foo` Obsoletes tags on CentOS/RHEL Resolves: rhbz#1990421 --- python-rpm-generators.spec | 9 +++++++-- pythonname.attr | 23 +++++++++++++++++++++++ tests/pythonname.sh | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/python-rpm-generators.spec b/python-rpm-generators.spec index ea5002e..8999c5d 100644 --- a/python-rpm-generators.spec +++ b/python-rpm-generators.spec @@ -1,7 +1,7 @@ Name: python-rpm-generators Summary: Dependency generators for Python RPMs Version: 12 -Release: 7%{?dist} +Release: 8%{?dist} # Originally all those files were part of RPM, so license is kept here License: GPLv2+ @@ -25,7 +25,7 @@ Requires: python3-packaging # We have parametric macro generators, we need RPM 4.16 (4.15.90+ is 4.16 alpha) Requires: rpm > 4.15.90-0 # This contains the Lua functions we use: -Requires: python-srpm-macros >= 3.8-5 +Requires: python-srpm-macros >= 3.9-49 %description -n python3-rpm-generators %{summary}. @@ -47,6 +47,11 @@ install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} *.py %{_rpmconfigdir}/pythonbundles.py %changelog +* Wed Jan 26 2022 Tomas Orsava - 12-8 +- From `python3-foo` packages automatically generate `python3.X-foo` Obsoletes + tags on CentOS/RHEL +- Resolves: rhbz#1990421 + * Tue Aug 10 2021 Mohan Boddu - 12-7 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688 diff --git a/pythonname.attr b/pythonname.attr index 9cd580a..07d8df5 100644 --- a/pythonname.attr +++ b/pythonname.attr @@ -16,4 +16,27 @@ end } +%__pythonname_obsoletes() %{?rhel:%{lua: + -- On CentOS/RHEL we automatically generate Obsoletes tags in the form: + -- package python3-foo -> Obsoletes: python3.XY-foo + -- This provides a clean upgrade path between major versions of CentOS/RHEL. + -- In Fedora this is not needed as we don't ship ecosystem packages + -- for alternative Python interpreters. + local python = require 'fedora.srpm.python' + -- this macro is called for each file in a package, the path being in %1 + -- but we don't need to know the path, so we would get for each file: Macro %1 defined but not used within scope + -- in here, we expand %name conditionally on %1 to suppress the warning + local name = rpm.expand('%{?1:%{name}}') + local evr = rpm.expand('%{?epoch:%{epoch}:}%{version}-%{release}') + local obsoletes = python.python_altobsoletes_once(name, evr) + -- obsoletes is either an array/table or nil + -- nil means the function was already called with the same arguments: + -- either with another file in %1 or manually via %py_provides + if obsoletes then + for i, obsolete in ipairs(obsoletes) do + print(obsolete .. ' ') + end + end +}} + %__pythonname_path ^/ diff --git a/tests/pythonname.sh b/tests/pythonname.sh index ab2024a..04bb63e 100755 --- a/tests/pythonname.sh +++ b/tests/pythonname.sh @@ -34,3 +34,41 @@ test $(rpm -qp --provides ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | grep echo "Provides for python3-py_provides" rpm -qp --provides ${RPMDIR}/python3-py_provides-0-0.noarch.rpm test $(rpm -qp --provides ${RPMDIR}/python3-py_provides-0-0.noarch.rpm | grep python-py_provides | wc -l) -eq 1 + + +echo "Obsoletes for python${X_Y}-foo" +rpm -qp --obsoletes ${RPMDIR}/python${X_Y}-foo-0-0.noarch.rpm +test $(rpm -qp --obsoletes ${RPMDIR}/python${X_Y}-foo-0-0.noarch.rpm | wc -l) -eq 0 + +echo "Obsoletes for python3-foo" +rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm +rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm | grep -q '^python39-foo < 0-0$' +test $(rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm | wc -l) -eq 1 + +echo "Obsoletes for python2-foo" +rpm -qp --obsoletes ${RPMDIR}/python2-foo-0-0.noarch.rpm +test $(rpm -qp --obsoletes ${RPMDIR}/python2-foo-0-0.noarch.rpm | wc -l) -eq 0 + +echo "Obsoletes for python-foo" +rpm -qp --obsoletes ${RPMDIR}/python-foo-0-0.noarch.rpm +test $(rpm -qp --obsoletes ${RPMDIR}/python-foo-0-0.noarch.rpm | wc -l) -eq 0 + +echo "Obsoletes for python3.5-foo" +rpm -qp --obsoletes ${RPMDIR}/python3.5-foo-0-0.noarch.rpm +test $(rpm -qp --obsoletes ${RPMDIR}/python3.5-foo-0-0.noarch.rpm | wc -l) -eq 0 + +echo "Obsoletes for python3-python_provide" +rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm +rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | grep -q '^python-python_provide < 0-0$' +rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | grep -q '^python39-python_provide < 0-0$' +test $(rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | grep python-python_provide | wc -l) -eq 1 +test $(rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | grep python39-python_provide | wc -l) -eq 1 +test $(rpm -qp --obsoletes ${RPMDIR}/python3-python_provide-0-0.noarch.rpm | wc -l) -eq 2 + +echo "Obsoletes for python3-py_provides" +rpm -qp --obsoletes ${RPMDIR}/python3-py_provides-0-0.noarch.rpm +rpm -qp --obsoletes ${RPMDIR}/python3-py_provides-0-0.noarch.rpm | grep -q '^python-py_provides < 0-0$' && exit 1 || true +rpm -qp --obsoletes ${RPMDIR}/python3-py_provides-0-0.noarch.rpm | grep -q '^python39-py_provides < 0-0$' +test $(rpm -qp --obsoletes ${RPMDIR}/python3-py_provides-0-0.noarch.rpm | grep python39-py_provides | wc -l) -eq 1 +test $(rpm -qp --obsoletes ${RPMDIR}/python3-py_provides-0-0.noarch.rpm | wc -l) -eq 1 +