Backport simplified %py_provides
This is a smallest possible backport of https://src.fedoraproject.org/rpms/python-rpm-macros/pull-request/52 Notable simplifications: - there is no Lua library - %python_provide remains untouched and the logic is not shared with %py_provides - there are no pythonXY-foo provides on Fedora < 33
This commit is contained in:
parent
18667277d5
commit
ead8ec025b
@ -132,3 +132,20 @@
|
||||
\
|
||||
print(url .. first .. '/' .. src .. '/' .. src .. '-' .. ver .. '.' .. ext)
|
||||
}
|
||||
|
||||
%py_provides() %{lua:
|
||||
local name = rpm.expand('%1')
|
||||
if name == '%1' then
|
||||
rpm.expand('%{error:%%py_provides requires at least 1 argument, the name to provide}')
|
||||
end
|
||||
local evr = rpm.expand('%2')
|
||||
if evr == '%2' then
|
||||
evr = rpm.expand('%{?epoch:%{epoch}:}%{version}-%{release}')
|
||||
end
|
||||
print('Provides: ' .. name .. ' = ' .. evr .. '\\n')
|
||||
-- NB: dash needs to be escaped!
|
||||
if name:match('^python3%-') then
|
||||
replaced = name:gsub('^python3%-', 'python-')
|
||||
print('Provides: ' .. replaced .. ' = ' .. evr .. '\\n')
|
||||
end
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
Name: python-rpm-macros
|
||||
Version: 3
|
||||
Release: 55%{?dist}
|
||||
Release: 56%{?dist}
|
||||
Summary: The unversioned Python RPM macros
|
||||
|
||||
# macros: MIT, compileall2.py: PSFv2
|
||||
@ -80,6 +80,9 @@ install -m 644 %{SOURCE5} \
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed May 20 2020 Miro Hrončok <mhroncok@redhat.com> - 3-56
|
||||
- Implement %%py_provides
|
||||
|
||||
* Tue Apr 28 2020 Miro Hrončok <mhroncok@redhat.com> - 3-55
|
||||
- Make pythonX-rpm-macros depend on python-rpm-macros (#1827811)
|
||||
|
||||
|
1
tests/.gitignore
vendored
Normal file
1
tests/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
__*__/
|
83
tests/test_evals.py
Normal file
83
tests/test_evals.py
Normal file
@ -0,0 +1,83 @@
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def rpm_eval(expression, **kwargs):
|
||||
cmd = ['rpmbuild']
|
||||
for var, value in kwargs.items():
|
||||
cmd += ['--define', f'{var} {value}']
|
||||
cmd += ['--eval', expression]
|
||||
cp = subprocess.run(cmd, text=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
assert cp.returncode == 0, cp.stderr
|
||||
return cp.stdout.strip().splitlines()
|
||||
|
||||
|
||||
def test_python_provide_python():
|
||||
assert rpm_eval('%python_provide python-foo') == []
|
||||
|
||||
|
||||
def test_python_provide_python3():
|
||||
lines = rpm_eval('%python_provide python3-foo', version='6', release='1.fc66')
|
||||
assert 'Obsoletes: python-foo < 6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 6-1.fc66' in lines
|
||||
assert len(lines) == 2
|
||||
|
||||
|
||||
def test_python_provide_python3_epoched():
|
||||
lines = rpm_eval('%python_provide python3-foo', epoch='1', version='6', release='1.fc66')
|
||||
assert 'Obsoletes: python-foo < 1:6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 1:6-1.fc66' in lines
|
||||
assert len(lines) == 2
|
||||
|
||||
|
||||
def test_python_provide_doubleuse():
|
||||
lines = rpm_eval('%{python_provide python3-foo}%{python_provide python3-foo}',
|
||||
version='6', release='1.fc66')
|
||||
assert 'Obsoletes: python-foo < 6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 6-1.fc66' in lines
|
||||
assert len(lines) == 4
|
||||
assert len(set(lines)) == 2
|
||||
|
||||
|
||||
def test_py_provides_python():
|
||||
lines = rpm_eval('%py_provides python-foo', version='6', release='1.fc66')
|
||||
assert 'Provides: python-foo = 6-1.fc66' in lines
|
||||
assert len(lines) == 1
|
||||
|
||||
|
||||
def test_py_provides_whatever():
|
||||
lines = rpm_eval('%py_provides whatever', version='6', release='1.fc66')
|
||||
assert 'Provides: whatever = 6-1.fc66' in lines
|
||||
assert len(lines) == 1
|
||||
|
||||
|
||||
def test_py_provides_python3():
|
||||
lines = rpm_eval('%py_provides python3-foo', version='6', release='1.fc66')
|
||||
assert 'Provides: python3-foo = 6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 6-1.fc66' in lines
|
||||
assert len(lines) == 2
|
||||
|
||||
|
||||
def test_py_provides_python3_epoched():
|
||||
lines = rpm_eval('%py_provides python3-foo', epoch='1', version='6', release='1.fc66')
|
||||
assert 'Provides: python3-foo = 1:6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 1:6-1.fc66' in lines
|
||||
assert len(lines) == 2
|
||||
|
||||
|
||||
def test_py_provides_doubleuse():
|
||||
lines = rpm_eval('%{py_provides python3-foo}%{py_provides python3-foo}',
|
||||
version='6', release='1.fc66')
|
||||
assert 'Provides: python3-foo = 6-1.fc66' in lines
|
||||
assert 'Provides: python-foo = 6-1.fc66' in lines
|
||||
assert len(lines) == 4
|
||||
assert len(set(lines)) == 2
|
||||
|
||||
|
||||
def test_py_provides_with_evr():
|
||||
lines = rpm_eval('%py_provides python3-foo 123',
|
||||
version='6', release='1.fc66')
|
||||
assert 'Provides: python3-foo = 123' in lines
|
||||
assert 'Provides: python-foo = 123' in lines
|
||||
assert len(lines) == 2
|
22
tests/tests.yml
Normal file
22
tests/tests.yml
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
tags:
|
||||
- classic
|
||||
tasks:
|
||||
- dnf:
|
||||
name: "*"
|
||||
state: latest
|
||||
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
tests:
|
||||
- pytest:
|
||||
dir: .
|
||||
run: pytest -v
|
||||
required_packages:
|
||||
- rpm-build
|
||||
- python-rpm-macros
|
||||
- python3-pytest
|
Loading…
Reference in New Issue
Block a user