Compare commits
25 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b284634b22 | ||
|
|
0bb99dc9e9 | ||
|
|
db95d6e735 | ||
|
|
03fc0de4ac | ||
|
|
91729cf8a0 | ||
|
|
02ef9fde40 | ||
|
|
223b71bb5e | ||
|
|
f3d6832f4d | ||
|
|
592400f58b | ||
|
|
52372a464c | ||
|
|
8fe27ad070 | ||
|
|
f9b21eca49 | ||
|
|
50768e7a3d | ||
|
|
e348b87fd9 | ||
|
|
47a0b37ac0 | ||
|
|
d6993270c2 | ||
|
|
2b8d03b0b1 | ||
|
|
2b230d8b53 | ||
|
|
079b71a567 | ||
|
|
279638a969 | ||
|
|
500fda1e6d | ||
|
|
1bdd94dd1d | ||
|
|
9d7ca941e7 | ||
|
|
78c739cfd1 | ||
|
|
197a88bf93 |
22 changed files with 215 additions and 102 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
|||
1
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -3,3 +3,4 @@
|
|||
/tests/__pycache__/
|
||||
/tests/data/scripts_pythondistdeps/usr/
|
||||
/test-sources-2021-03-11.tar.gz
|
||||
/test-sources-2023-01-04.tar.gz
|
||||
|
|
|
|||
45
plan.fmf
Normal file
45
plan.fmf
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
execute:
|
||||
how: tmt
|
||||
|
||||
discover:
|
||||
- name: same_repo
|
||||
how: shell
|
||||
dist-git-source: true
|
||||
dist-git-download-only: true
|
||||
tests:
|
||||
- name: pythonabi
|
||||
path: /tests
|
||||
test: ./pythonabi.sh
|
||||
- name: pythonname
|
||||
path: /tests
|
||||
test: ./pythonname.sh
|
||||
- name: pythondist
|
||||
path: /tests
|
||||
test: ./pythondist.sh
|
||||
- name: console_script
|
||||
path: /tests
|
||||
test: ./console_script.sh
|
||||
- name: pytest
|
||||
test: cd $TMT_SOURCE_DIR && ./tests/download_data_and_run_pytest.sh
|
||||
|
||||
prepare:
|
||||
- name: Install dependencies
|
||||
how: install
|
||||
package:
|
||||
- rpm-build
|
||||
- rpmdevtools
|
||||
- fedpkg-minimal
|
||||
- python3-devel
|
||||
- python3-pip
|
||||
- python3-pytest
|
||||
- python3-pyyaml
|
||||
- python3-setuptools
|
||||
- python3-wheel
|
||||
- dnf
|
||||
- name: Update packages
|
||||
how: shell
|
||||
script: dnf upgrade -y
|
||||
- name: rpm_qa
|
||||
order: 100
|
||||
how: shell
|
||||
script: rpm -qa | sort | tee $TMT_PLAN_DATA/rpmqa.txt
|
||||
|
|
@ -1,19 +1,28 @@
|
|||
Name: python-rpm-generators
|
||||
Summary: Dependency generators for Python RPMs
|
||||
Version: 13
|
||||
Release: 2%{?dist}
|
||||
Version: 14
|
||||
Release: 13%{?dist}
|
||||
|
||||
# Originally all those files were part of RPM, so license is kept here
|
||||
License: GPLv2+
|
||||
Url: https://src.fedoraproject.org/python-rpm-generators
|
||||
# Commit is the last change in following files
|
||||
Url: https://src.fedoraproject.org/rpms/python-rpm-generators
|
||||
|
||||
# Originally the following files were part of RPM, so the license is inherited: GPL-2.0-or-later
|
||||
# The COPYING file is grabbed from the last commit that changed the files
|
||||
Source0: https://raw.githubusercontent.com/rpm-software-management/rpm/102eab50b3d0d6546dfe082eac0ade21e6b3dbf1/COPYING
|
||||
Source1: python.attr
|
||||
Source2: pythondist.attr
|
||||
# This was crafted in-place as a fork of python.attr, hence also GPL-2.0-or-later
|
||||
Source3: pythonname.attr
|
||||
# This one is also originally from RPM, but it has its own license declaration: LGPL-2.1-or-later
|
||||
Source4: pythondistdeps.py
|
||||
# This was crafted in-place with the following license declaration:
|
||||
# LicenseRef-Fedora-Public-Domain OR CC0-1.0 OR LGPL-2.1-or-later OR GPL-2.0-or-later
|
||||
# Note that CC0-1.0 is not allowed for code in Fedora, so we skip it in the package License tag
|
||||
Source5: pythonbundles.py
|
||||
|
||||
# See individual licenses above Source declarations
|
||||
# Originally, this was simplified to GPL-2.0-or-later, but "effective license" analysis is no longer allowed
|
||||
License: GPL-2.0-or-later AND LGPL-2.1-or-later AND (LicenseRef-Fedora-Public-Domain OR LGPL-2.1-or-later OR GPL-2.0-or-later)
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
%description
|
||||
|
|
@ -47,6 +56,46 @@ install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} *.py
|
|||
%{_rpmconfigdir}/pythonbundles.py
|
||||
|
||||
%changelog
|
||||
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 14-13
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 14-12
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 14-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 14-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 14-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Tue Oct 03 2023 Miro Hrončok <mhroncok@redhat.com> - 14-8
|
||||
- Avoid DeprecationWarning: Implicit None on return values is deprecated and will raise KeyErrors
|
||||
|
||||
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 14-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Wed May 24 2023 Todd Zullinger <tmz@pobox.com> - 14-6
|
||||
- Fix URL tag
|
||||
|
||||
* Fri May 05 2023 Miro Hrončok <mhroncok@redhat.com> - 14-5
|
||||
- Declare the license via a complex SPDX expression rather than "effective license"
|
||||
|
||||
* Mon Apr 17 2023 Kalev Lember <klember@redhat.com> - 14-4
|
||||
- Generate provides for /app-installed flatpak builds
|
||||
|
||||
* Tue Mar 07 2023 Miro Hrončok <mhroncok@redhat.com> - 14-3
|
||||
- Avoid needless pkg_resources import in pythonbundles.py
|
||||
- Ignore environment markers in pythonbundles.py
|
||||
|
||||
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 14-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Thu Dec 22 2022 Karolina Surma <ksurma@redhat.com> - 14-1
|
||||
- https://fedoraproject.org/wiki/Changes/Prevent-Providing-python3dist(pkg)=0
|
||||
|
||||
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 13-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
14
python.attr
14
python.attr
|
|
@ -5,8 +5,10 @@
|
|||
-- python(abi) = MAJOR.MINOR
|
||||
-- (Don't match against -config tools e.g. /usr/bin/python2.6-config)
|
||||
local path = rpm.expand('%1')
|
||||
if path:match('/usr/bin/python%d+%.%d+$') then
|
||||
local provides = path:gsub('.*/usr/bin/python(%d+%.%d+)', 'python(abi) = %1')
|
||||
-- Use /usr prefix by default, and /app for flatpak builds
|
||||
local prefix = rpm.expand('%{?!flatpak:/usr}%{?flatpak:/app}')
|
||||
if path:match(prefix .. '/bin/python%d+%.%d+$') then
|
||||
local provides = path:gsub('.*' .. prefix .. '/bin/python(%d+%.%d+)', 'python(abi) = %1')
|
||||
print(provides)
|
||||
end
|
||||
}
|
||||
|
|
@ -18,10 +20,12 @@
|
|||
-- generating a line of the form:
|
||||
-- python(abi) = MAJOR.MINOR
|
||||
local path = rpm.expand('%1')
|
||||
if path:match('/usr/lib%d*/python%d+%.%d+/.*') then
|
||||
local requires = path:gsub('.*/usr/lib%d*/python(%d+%.%d+)/.*', 'python(abi) = %1')
|
||||
-- Use /usr prefix by default, and /app for flatpak builds
|
||||
local prefix = rpm.expand('%{?!flatpak:/usr}%{?flatpak:/app}')
|
||||
if path:match(prefix .. '/lib%d*/python%d+%.%d+/.*') then
|
||||
local requires = path:gsub('.*' .. prefix .. '/lib%d*/python(%d+%.%d+)/.*', 'python(abi) = %1')
|
||||
print(requires)
|
||||
end
|
||||
}
|
||||
|
||||
%__python_path ^((%{_prefix}/lib(64)?/python[[:digit:]]+\\.[[:digit:]]+/.*\\.(py[oc]?|so))|(%{_bindir}/python[[:digit:]]+\\.[[:digit:]]+))$
|
||||
%__python_path ^((%{?!flatpak:/usr}%{?flatpak:/app}/lib(64)?/python[[:digit:]]+\\.[[:digit:]]+/.*\\.(py[oc]?|so))|(%{_bindir}/python[[:digit:]]+\\.[[:digit:]]+))$
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
# This program is free software.
|
||||
#
|
||||
# It is placed in the public domain or under the CC0-1.0-Universal license,
|
||||
# whichever is more permissive.
|
||||
# whichever you choose.
|
||||
#
|
||||
# Alternatively, it may be redistributed and/or modified under the terms of
|
||||
# the LGPL version 2.1 (or later) or GPL version 2 (or later).
|
||||
|
|
@ -15,12 +15,9 @@
|
|||
import pathlib
|
||||
import sys
|
||||
|
||||
# inject parse_version import to pythondistdeps
|
||||
# not the nicest API, but :/
|
||||
from pkg_resources import parse_version
|
||||
import pythondistdeps
|
||||
pythondistdeps.parse_version = parse_version
|
||||
from packaging import requirements
|
||||
|
||||
import pythondistdeps
|
||||
|
||||
def generate_bundled_provides(paths, namespace):
|
||||
provides = set()
|
||||
|
|
@ -38,8 +35,14 @@ def generate_bundled_provides(paths, namespace):
|
|||
continue
|
||||
line = line.strip()
|
||||
if line:
|
||||
name, _, version = line.partition('==')
|
||||
name = pythondistdeps.normalize_name(name)
|
||||
requirement = requirements.Requirement(line)
|
||||
for spec in requirement.specifier:
|
||||
if spec.operator == '==':
|
||||
version = spec.version
|
||||
break
|
||||
else:
|
||||
raise ValueError('pythonbundles.py only handles exactly one == requirement')
|
||||
name = pythondistdeps.normalize_name(requirement.name)
|
||||
bundled_name = f"bundled({namespace}({name}))"
|
||||
python_provide = pythondistdeps.convert(bundled_name, '==', version)
|
||||
provides.add(f'Provides: {python_provide}')
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
%__pythondist_provides %{_rpmconfigdir}/pythondistdeps.py --provides --normalized-names-format pep503 --package-name %{name} --majorver-provides-versions %{__default_python3_version}
|
||||
%__pythondist_provides %{_rpmconfigdir}/pythondistdeps.py --provides --normalized-names-format pep503 --package-name %{name} --majorver-provides-versions %{__default_python3_version} %{?!_python_dist_allow_version_zero:--fail-if-zero}
|
||||
%__pythondist_requires %{_rpmconfigdir}/pythondistdeps.py --requires --normalized-names-format pep503 --package-name %{name} %{?!_python_no_extras_requires:--require-extras-subpackages} --console-scripts-nodep-setuptools-since 3.10
|
||||
%__pythondist_path ^/usr/lib(64)?/python[3-9]\\.[[:digit:]]+/site-packages/[^/]+\\.(dist-info|egg-info|egg-link)$
|
||||
%__pythondist_path ^%{?!flatpak:/usr}%{?flatpak:/app}/lib(64)?/python[3-9]\\.[[:digit:]]+/site-packages/[^/]+\\.(dist-info|egg-info|egg-link)$
|
||||
|
|
|
|||
|
|
@ -94,8 +94,8 @@ class Distribution(PathDistribution):
|
|||
# that it works also on previous Python/importlib_metadata versions.
|
||||
@property
|
||||
def name(self):
|
||||
"""Return the 'Name' metadata for the distribution package."""
|
||||
return self.metadata['Name']
|
||||
"""Return the 'Name' metadata for the distribution package or None."""
|
||||
return self.metadata.get('Name')
|
||||
|
||||
def _parse_py_version(self, path):
|
||||
# Try to parse the Python version from the path the metadata
|
||||
|
|
@ -155,6 +155,9 @@ class RpmVersion():
|
|||
self.post = None
|
||||
return self
|
||||
|
||||
def is_zero(self):
|
||||
return self.__str__() == '0'
|
||||
|
||||
def __str__(self):
|
||||
if self.is_legacy():
|
||||
return self.version
|
||||
|
|
@ -334,9 +337,13 @@ def main():
|
|||
help="If there is a dependency on a package with extras functionality, require the extras subpackage")
|
||||
parser.add_argument('--package-name', action='store', help="Name of the RPM package that's being inspected. Required for extras requires/provides to work.")
|
||||
parser.add_argument('--namespace', action='store', help="Namespace for the printed Requires, Provides, Recommends and Conflicts")
|
||||
parser.add_argument('--fail-if-zero', action='store_true', help='Fail the script if the automatically generated Provides version was 0, which usually indicates a packaging error.')
|
||||
parser.add_argument('files', nargs=argparse.REMAINDER, help="Files from the RPM package that are to be inspected, can also be supplied on stdin")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.fail_if_zero and not args.provides:
|
||||
raise parser.error('--fail-if-zero only works with --provides')
|
||||
|
||||
py_abi = args.requires
|
||||
py_deps = {}
|
||||
|
||||
|
|
@ -470,6 +477,17 @@ def main():
|
|||
if dist.version:
|
||||
version = dist.version
|
||||
spec = ('==', version)
|
||||
if args.fail_if_zero:
|
||||
if RpmVersion(version).is_zero():
|
||||
print('*** PYTHON_PROVIDED_VERSION_NORMALIZES_TO_ZERO___SEE_STDERR ***')
|
||||
print(f'\nError: The version in the Python package metadata {version} normalizes to zero.\n'
|
||||
'It\'s likely a packaging error caused by missing version information\n'
|
||||
'(e.g. when using a version control system snapshot as a source).\n'
|
||||
'Try providing the version information manually when building the Python package,\n'
|
||||
'for example by setting the SETUPTOOLS_SCM_PRETEND_VERSION environment variable if the package uses setuptools_scm.\n'
|
||||
'If you are confident that the version of the Python package is intentionally zero,\n'
|
||||
'you may %define the _python_dist_allow_version_zero macro in the spec file to disable this check.\n', file=stderr)
|
||||
exit(65) # os.EX_DATAERR
|
||||
|
||||
if normalized_names_provide_legacy:
|
||||
if spec not in py_deps[name]:
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
%__pythonname_provides() %{lua:
|
||||
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 name = rpm.expand('%{name}')
|
||||
local evr = rpm.expand('%{?epoch:%{epoch}:}%{version}-%{release}')
|
||||
local provides = python.python_altprovides_once(name, evr)
|
||||
-- provides is either an array/table or nil
|
||||
|
|
@ -23,10 +20,7 @@
|
|||
-- 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 name = rpm.expand('%{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
|
||||
|
|
|
|||
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (test-sources-2021-03-11.tar.gz) = 6f34c8151625be489a6a4d56d1fd3d39b7908bd31402c9703cb65918385320dfad35f35a32920c816fb85a829f44aaf04dc1d0654ccf512e26e87e95dbf87430
|
||||
SHA512 (test-sources-2023-01-04.tar.gz) = ca25c35970e91adeaed0873c045f4335c33b96a4ef4c56a36bfb2fd9e1d4799142cf0513abb066479fdb14d2d184b3b825c1d90119ac8e8d0e9aa1a4423701d1
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ requirementslib==1.5.11
|
|||
distlib==0.3.0
|
||||
packaging==20.3
|
||||
pyparsing==2.4.7
|
||||
plette==0.2.3
|
||||
plette[validation]==0.2.3
|
||||
tomlkit==0.5.11
|
||||
shellingham==1.3.2
|
||||
six==1.14.0
|
||||
|
|
|
|||
|
|
@ -3,3 +3,4 @@ Provides: bundled(python3dist(ordered-set)) = 3.1.1
|
|||
Provides: bundled(python3dist(packaging)) = 16.8
|
||||
Provides: bundled(python3dist(pyparsing)) = 2.2.1
|
||||
Provides: bundled(python3dist(six)) = 1.10
|
||||
Provides: bundled(python3dist(tomli)) = 1.2.3
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
packaging==16.8
|
||||
pyparsing==2.2.1
|
||||
ordered-set==3.1.1
|
||||
tomli==1.2.3;python_version<"3.11"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
Provides: bundled(python3dist(ordered-set)) = 3.1.1
|
||||
Provides: bundled(python3dist(packaging)) = 16.8
|
||||
Provides: bundled(python3dist(pyparsing)) = 2.2.1
|
||||
Provides: bundled(python3dist(tomli)) = 1.2.3
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Metadata-Version: 2.1
|
||||
Name: pyreq2rpm.tests
|
||||
Version: 2020.04.07.024dab0
|
||||
Version: 2020.04.07.024
|
||||
Summary: Test package to verify conversion of dependencies from pip/python to rpm format, data taken from pyreq2rpm
|
||||
Author: Tomas Orsava (author of this metapackage)
|
||||
Home-page: https://github.com/gordonmessmer/pyreq2rpm
|
||||
|
|
@ -45,10 +45,8 @@ foobar43!=2.0.post1
|
|||
foobar44<=2.4.8
|
||||
foobar45<=2.4.8.0
|
||||
foobar46<=2.4.8.1
|
||||
foobar47<=2.4.8.*
|
||||
foobar48<=2.0
|
||||
foobar49<=2
|
||||
foobar50<=2.*
|
||||
foobar51<=2.4.8b5
|
||||
foobar52<=2.0.0b5
|
||||
foobar53<=2.4.8.post1
|
||||
|
|
@ -56,10 +54,8 @@ foobar54<=2.0.post1
|
|||
foobar55<2.4.8
|
||||
foobar56<2.4.8.0
|
||||
foobar57<2.4.8.1
|
||||
foobar58<2.4.8.*
|
||||
foobar59<2.0
|
||||
foobar60<2
|
||||
foobar61<2.*
|
||||
foobar62<2.4.8b5
|
||||
foobar63<2.0.0b5
|
||||
foobar64<2.4.8.post1
|
||||
|
|
@ -67,10 +63,8 @@ foobar65<2.0.post1
|
|||
foobar66>=2.4.8
|
||||
foobar67>=2.4.8.0
|
||||
foobar68>=2.4.8.1
|
||||
foobar69>=2.4.8.*
|
||||
foobar70>=2.0
|
||||
foobar71>=2
|
||||
foobar72>=2.*
|
||||
foobar73>=2.4.8b5
|
||||
foobar74>=2.0.0b5
|
||||
foobar75>=2.4.8.post1
|
||||
|
|
@ -78,10 +72,8 @@ foobar76>=2.0.post1
|
|||
foobar77>2.4.8
|
||||
foobar78>2.4.8.0
|
||||
foobar79>2.4.8.1
|
||||
foobar80>2.4.8.*
|
||||
foobar81>2.0
|
||||
foobar82>2
|
||||
foobar83>2.*
|
||||
foobar84>2.4.8b5
|
||||
foobar85>2.0.0b5
|
||||
foobar86>2.4.8.post1
|
||||
|
|
@ -1224,8 +1224,8 @@
|
|||
stdout:
|
||||
provides: '*** PYTHON_METADATA_FAILED_TO_PARSE_ERROR___SEE_STDERR ***'
|
||||
requires: '*** PYTHON_METADATA_FAILED_TO_PARSE_ERROR___SEE_STDERR ***'
|
||||
pyreq2rpm.tests-2020.04.07.024dab0-py3.9.egg-info:
|
||||
provides: python3.9dist(pyreq2rpm-tests) = 2020.04.07.024dab0
|
||||
pyreq2rpm.tests-2020.04.07.024-py3.9.egg-info:
|
||||
provides: python3.9dist(pyreq2rpm-tests) = 2020.4.7.24
|
||||
requires: |-
|
||||
python(abi) = 3.9
|
||||
((python3.9dist(babel) < 2 or python3.9dist(babel) > 2) with python3.9dist(babel) >= 1.3)
|
||||
|
|
@ -1271,10 +1271,8 @@
|
|||
python3.9dist(foobar44) <= 2.4.8
|
||||
python3.9dist(foobar45) <= 2.4.8
|
||||
python3.9dist(foobar46) <= 2.4.8.1
|
||||
python3.9dist(foobar47) < 2.4.8~~
|
||||
python3.9dist(foobar48) <= 2
|
||||
python3.9dist(foobar49) <= 2
|
||||
python3.9dist(foobar50) < 2~~
|
||||
python3.9dist(foobar51) <= 2.4.8~b5
|
||||
python3.9dist(foobar52) <= 2~b5
|
||||
python3.9dist(foobar53) <= 2.4.8^post1
|
||||
|
|
@ -1282,10 +1280,8 @@
|
|||
python3.9dist(foobar55) < 2.4.8~~
|
||||
python3.9dist(foobar56) < 2.4.8~~
|
||||
python3.9dist(foobar57) < 2.4.8.1~~
|
||||
python3.9dist(foobar58) < 2.4.8~~
|
||||
python3.9dist(foobar59) < 2~~
|
||||
python3.9dist(foobar60) < 2~~
|
||||
python3.9dist(foobar61) < 2~~
|
||||
python3.9dist(foobar62) < 2.4.8~b5
|
||||
python3.9dist(foobar63) < 2~b5
|
||||
python3.9dist(foobar64) < 2.4.8^post1
|
||||
|
|
@ -1293,11 +1289,9 @@
|
|||
python3.9dist(foobar66) >= 2.4.8
|
||||
python3.9dist(foobar67) >= 2.4.8
|
||||
python3.9dist(foobar68) >= 2.4.8.1
|
||||
python3.9dist(foobar69) >= 2.4.8
|
||||
(python3.9dist(foobar7) >= 2.4.8~b5 with python3.9dist(foobar7) < 2.5)
|
||||
python3.9dist(foobar70) >= 2
|
||||
python3.9dist(foobar71) >= 2
|
||||
python3.9dist(foobar72) >= 2
|
||||
python3.9dist(foobar73) >= 2.4.8~b5
|
||||
python3.9dist(foobar74) >= 2~b5
|
||||
python3.9dist(foobar75) >= 2.4.8^post1
|
||||
|
|
@ -1306,10 +1300,8 @@
|
|||
python3.9dist(foobar78) > 2.4.8.0
|
||||
python3.9dist(foobar79) > 2.4.8.1.0
|
||||
(python3.9dist(foobar8) >= 2~b5 with python3.9dist(foobar8) < 2.1)
|
||||
python3.9dist(foobar80) >= 2.4.8
|
||||
python3.9dist(foobar81) > 2.0
|
||||
python3.9dist(foobar82) > 2.0
|
||||
python3.9dist(foobar83) >= 2
|
||||
python3.9dist(foobar84) > 2.4.8~b5
|
||||
python3.9dist(foobar85) > 2~b5
|
||||
python3.9dist(foobar86) > 2.4.8^post1
|
||||
|
|
@ -1362,4 +1354,39 @@
|
|||
requires: |-
|
||||
python(abi) = 3.10
|
||||
python3.10dist(virtualenv) >= 20.0.35
|
||||
|
||||
--requires --fail-if-zero:
|
||||
--provides --majorver-provides --fail-if-zero:
|
||||
usr/lib/python3.11/site-packages/importlib_metadata-0.0-py3.11.egg-info:
|
||||
stderr:
|
||||
provides: |-
|
||||
Error: The version in the Python package metadata 0.0 normalizes to zero.
|
||||
It's likely a packaging error caused by missing version information
|
||||
(e.g. when using a version control system snapshot as a source).
|
||||
Try providing the version information manually when building the Python package,
|
||||
for example by setting the SETUPTOOLS_SCM_PRETEND_VERSION environment variable if the package uses setuptools_scm.
|
||||
If you are confident that the version of the Python package is intentionally zero,
|
||||
you may %define the _python_dist_allow_version_zero macro in the spec file to disable this check.
|
||||
requires: '*error: --fail-if-zero only works with --provides*'
|
||||
stdout:
|
||||
provides: '*** PYTHON_PROVIDED_VERSION_NORMALIZES_TO_ZERO___SEE_STDERR ***'
|
||||
requires: ''
|
||||
--requires:
|
||||
--provides --majorver-provides:
|
||||
usr/lib/python3.11/site-packages/importlib_metadata-0.0-py3.11.egg-info:
|
||||
provides: |-
|
||||
python3.11dist(importlib-metadata) = 0
|
||||
python3dist(importlib-metadata) = 0
|
||||
requires: |-
|
||||
python(abi) = 3.11
|
||||
python3.11dist(setuptools)
|
||||
python3.11dist(wheel)
|
||||
--requires:
|
||||
--provides --majorver-provides --fail-if-zero:
|
||||
usr/lib/python3.11/site-packages/importlib_metadata-0.1-py3.11.egg-info:
|
||||
provides: |-
|
||||
python3.11dist(importlib-metadata) = 0.1
|
||||
python3dist(importlib-metadata) = 0.1
|
||||
requires: |-
|
||||
python(abi) = 3.11
|
||||
python3.11dist(setuptools)
|
||||
python3.11dist(wheel)
|
||||
|
|
|
|||
|
|
@ -103,3 +103,7 @@ dnspython:
|
|||
build:
|
||||
wheel:
|
||||
'0.8.0': ['3.10']
|
||||
importlib_metadata:
|
||||
sdist:
|
||||
'0.0': ['3.11']
|
||||
'0.1': ['3.11']
|
||||
|
|
|
|||
15
tests/download_data_and_run_pytest.sh
Executable file
15
tests/download_data_and_run_pytest.sh
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/bash -eux
|
||||
# Use update-test-sources.sh to update the test data
|
||||
|
||||
# When the tests run in python-rpm-generators,
|
||||
# the structure on disk does not match the dist-git repository.
|
||||
# We apparently must use the standard-test-source role to grab the sources.
|
||||
# OTOH in other packages, we must use fedpkg(-minimal) or centpkg(-minimal),
|
||||
# depending on the destination OS.
|
||||
# The --force flag is required in full-blown fedpkg/centpkg (the source is unused in spec),
|
||||
# and it is ignored in fedpkg/centpkg-minimal (all sources are always downloaded).
|
||||
test -f test-sources-*.tar.gz || fedpkg sources --force || centpkg sources --force
|
||||
|
||||
tar -xvf test-sources-*.tar.gz -C ./tests/data/scripts_pythondistdeps/
|
||||
cd tests/
|
||||
python3 -m pytest -vvv
|
||||
|
|
@ -43,7 +43,7 @@ test $(rpm -qp --obsoletes ${RPMDIR}/python${X_Y}-foo-0-0.noarch.rpm | wc -l) -e
|
|||
echo "Obsoletes for python3-foo"
|
||||
rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm
|
||||
# In ELN/RHEL the pythonX.Y-* Obsoletes is generated, but not in Fedora, so we check for it explicitly.
|
||||
rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm | grep -q '^python'${X_Y}'-py_provides < 0-0$' && exit 1 || true
|
||||
rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm | grep -q '^python'${X_Y}'-foo < 0-0$' && exit 1 || true
|
||||
test $(rpm -qp --obsoletes ${RPMDIR}/python3-foo-0-0.noarch.rpm | wc -l) -eq 0
|
||||
|
||||
echo "Obsoletes for python2-foo"
|
||||
|
|
|
|||
|
|
@ -53,6 +53,11 @@ def run_pythondistdeps(provides_params, requires_params, dist_egg_info_path, exp
|
|||
requires = subprocess.run((sys.executable, PYTHONDISTDEPS_PATH, *shlex.split(requires_params)),
|
||||
input=files, capture_output=True, check=False, encoding="utf-8")
|
||||
|
||||
print(provides_params, provides.stdout, sep=':\n', file=sys.stdout)
|
||||
print(requires_params, requires.stdout, sep=':\n', file=sys.stdout)
|
||||
print(provides_params, provides.stderr, sep=':\n', file=sys.stderr)
|
||||
print(requires_params, requires.stderr, sep=':\n', file=sys.stderr)
|
||||
|
||||
if expect_failure:
|
||||
if provides.returncode == 0 or requires.returncode == 0:
|
||||
raise RuntimeError(f"pythondistdeps.py did not exit with a non-zero code as expected.\n"
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
---
|
||||
- hosts: localhost
|
||||
tags:
|
||||
- classic
|
||||
tasks:
|
||||
- dnf:
|
||||
name: "*"
|
||||
state: latest
|
||||
|
||||
- hosts: localhost
|
||||
tags:
|
||||
- classic
|
||||
pre_tasks:
|
||||
- import_role:
|
||||
name: standard-test-source
|
||||
vars:
|
||||
fetch_only: True
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tests:
|
||||
- pythonabi:
|
||||
dir: .
|
||||
run: ./pythonabi.sh
|
||||
- pythonname:
|
||||
dir: .
|
||||
run: ./pythonname.sh
|
||||
- pythondist:
|
||||
dir: .
|
||||
run: ./pythondist.sh
|
||||
- console_script:
|
||||
dir: .
|
||||
run: ./console_script.sh
|
||||
- prepare-test-data:
|
||||
dir: .
|
||||
run: tar -xvf test-sources-*.tar.gz -C ./tests/data/scripts_pythondistdeps/
|
||||
- pytest:
|
||||
dir: ./tests
|
||||
# Use update-test-sources.sh to update the test data
|
||||
run: python3 -m pytest --capture=no -vvv
|
||||
required_packages:
|
||||
- rpm-build
|
||||
- rpmdevtools
|
||||
- python3-devel
|
||||
- python3-pip
|
||||
- python3-pytest
|
||||
- python3-pyyaml
|
||||
- python3-setuptools
|
||||
- python3-wheel
|
||||
Loading…
Add table
Add a link
Reference in a new issue