Allow to combine %pycached with other macros (e.g. %exclude or %ghost)
Previous implementation allowed for only one argument to be passed to the %pycached macro, which made it impossible to combine it with other macros. Current implementation allows to pass other macros as arguments to %pycached. Example: %pycached %exclude /path/to/foo.py For macro expansion limitations, the opposite order is not possible. That is to be documented in the guidelines: https://pagure.io/packaging-committee/pull-request/986 Added some tests. Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1838992 Co-authored-by: Marcel Plch <mplch@redhat.com>
This commit is contained in:
parent
bae52eafbe
commit
985a80572f
@ -53,7 +53,7 @@
|
|||||||
# This only supports Python 3.5+ and will never work with Python 2.
|
# This only supports Python 3.5+ and will never work with Python 2.
|
||||||
# Hence, it has no Python version in the name.
|
# Hence, it has no Python version in the name.
|
||||||
%pycached() %{lua:
|
%pycached() %{lua:
|
||||||
path = rpm.expand("%{?1}")
|
path = rpm.expand("%{?*}")
|
||||||
if (string.sub(path, "-3") ~= ".py") then
|
if (string.sub(path, "-3") ~= ".py") then
|
||||||
rpm.expand("%{error:%%pycached can only be used with paths explicitly ending with .py}")
|
rpm.expand("%{error:%%pycached can only be used with paths explicitly ending with .py}")
|
||||||
else
|
else
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Name: python-rpm-macros
|
Name: python-rpm-macros
|
||||||
Version: 3.9
|
Version: 3.9
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: The common Python RPM macros
|
Summary: The common Python RPM macros
|
||||||
|
|
||||||
# macros and lua: MIT, compileall2.py: PSFv2
|
# macros and lua: MIT, compileall2.py: PSFv2
|
||||||
@ -107,6 +107,9 @@ install -m 644 compileall2.py %{buildroot}%{_rpmconfigdir}/redhat/
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 11 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9-3
|
||||||
|
- Allow to combine %%pycached with other macros (e.g. %%exclude or %%ghost) (#1838992)
|
||||||
|
|
||||||
* Sat May 30 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9-2
|
* Sat May 30 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9-2
|
||||||
- Require the exact same version-release of other subpackages of this package
|
- Require the exact same version-release of other subpackages of this package
|
||||||
|
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
X_Y = f'{sys.version_info[0]}.{sys.version_info[1]}'
|
X_Y = f'{sys.version_info[0]}.{sys.version_info[1]}'
|
||||||
|
XY = f'{sys.version_info[0]}{sys.version_info[1]}'
|
||||||
|
|
||||||
|
|
||||||
def rpm_eval(expression, **kwargs):
|
def rpm_eval(expression, fails=False, **kwargs):
|
||||||
cmd = ['rpmbuild']
|
cmd = ['rpmbuild']
|
||||||
for var, value in kwargs.items():
|
for var, value in kwargs.items():
|
||||||
if value is None:
|
if value is None:
|
||||||
@ -12,9 +14,12 @@ def rpm_eval(expression, **kwargs):
|
|||||||
else:
|
else:
|
||||||
cmd += ['--define', f'{var} {value}']
|
cmd += ['--define', f'{var} {value}']
|
||||||
cmd += ['--eval', expression]
|
cmd += ['--eval', expression]
|
||||||
cp = subprocess.run(cmd, text=True,
|
cp = subprocess.run(cmd, text=True, env={**os.environ, 'LANG': 'C.utf-8'},
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
assert cp.returncode == 0, cp.stderr
|
if fails:
|
||||||
|
assert cp.returncode != 0, cp.stdout
|
||||||
|
elif fails is not None:
|
||||||
|
assert cp.returncode == 0, cp.stdout
|
||||||
return cp.stdout.strip().splitlines()
|
return cp.stdout.strip().splitlines()
|
||||||
|
|
||||||
|
|
||||||
@ -209,3 +214,49 @@ def test_py3_shebang_fix_empty_flags():
|
|||||||
def test_py_shebang_fix_custom():
|
def test_py_shebang_fix_custom():
|
||||||
cmd = rpm_eval('%py_shebang_fix arg1 arg2 arg3', __python='/usr/bin/pypy')[0]
|
cmd = rpm_eval('%py_shebang_fix arg1 arg2 arg3', __python='/usr/bin/pypy')[0]
|
||||||
assert cmd == '/usr/bin/pathfix.py -pni /usr/bin/pypy -ka s arg1 arg2 arg3'
|
assert cmd == '/usr/bin/pathfix.py -pni /usr/bin/pypy -ka s arg1 arg2 arg3'
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_in_sitelib():
|
||||||
|
lines = rpm_eval('%pycached %{python3_sitelib}/foo*.py')
|
||||||
|
assert lines == [
|
||||||
|
f'/usr/lib/python{X_Y}/site-packages/foo*.py',
|
||||||
|
f'/usr/lib/python{X_Y}/site-packages/__pycache__/foo*.cpython-{XY}{{,.opt-?}}.pyc'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_in_sitearch():
|
||||||
|
lines = rpm_eval('%pycached %{python3_sitearch}/foo*.py')
|
||||||
|
lib = rpm_eval('%_lib')[0]
|
||||||
|
assert lines == [
|
||||||
|
f'/usr/{lib}/python{X_Y}/site-packages/foo*.py',
|
||||||
|
f'/usr/{lib}/python{X_Y}/site-packages/__pycache__/foo*.cpython-{XY}{{,.opt-?}}.pyc'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_in_36():
|
||||||
|
lines = rpm_eval('%pycached /usr/lib/python3.6/site-packages/foo*.py')
|
||||||
|
assert lines == [
|
||||||
|
'/usr/lib/python3.6/site-packages/foo*.py',
|
||||||
|
'/usr/lib/python3.6/site-packages/__pycache__/foo*.cpython-36{,.opt-?}.pyc'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_in_custom_dir():
|
||||||
|
lines = rpm_eval('%pycached /bar/foo*.py')
|
||||||
|
assert lines == [
|
||||||
|
'/bar/foo*.py',
|
||||||
|
'/bar/__pycache__/foo*.cpython-3*{,.opt-?}.pyc'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_with_exclude():
|
||||||
|
lines = rpm_eval('%pycached %exclude %{python3_sitelib}/foo*.py')
|
||||||
|
assert lines == [
|
||||||
|
f'%exclude /usr/lib/python{X_Y}/site-packages/foo*.py',
|
||||||
|
f'%exclude /usr/lib/python{X_Y}/site-packages/__pycache__/foo*.cpython-{XY}{{,.opt-?}}.pyc'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_pycached_fails_with_extension_glob():
|
||||||
|
lines = rpm_eval('%pycached %{python3_sitelib}/foo.py*', fails=True)
|
||||||
|
assert lines[0] == 'error: %pycached can only be used with paths explicitly ending with .py'
|
||||||
|
Loading…
Reference in New Issue
Block a user