Sync with upstream RPM
- Handle version ending with ".*" - Handle compatible-release operator "~=" - Use rich deps for semantically versioned dependencies - Match Python version if minor has multiple digits (e.g. 3.10) - Only add setuptools requirement for egg-info packages https://github.com/rpm-software-management/rpm/pull/951 https://github.com/rpm-software-management/rpm/pull/973 https://github.com/rpm-software-management/rpm/pull/982 Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1758141 Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1777382
This commit is contained in:
parent
b9fe0e7182
commit
ca811dbf35
@ -4,8 +4,8 @@
|
||||
|
||||
Name: python-rpm-generators
|
||||
Summary: Dependency generators for Python RPMs
|
||||
Version: 9
|
||||
Release: 2%{?dist}
|
||||
Version: 10
|
||||
Release: 1%{?dist}
|
||||
|
||||
# Originally all those files were part of RPM, so license is kept here
|
||||
License: GPLv2+
|
||||
@ -49,6 +49,13 @@ install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} pythondeps.sh pythondistdeps.py
|
||||
%{_rpmconfigdir}/pythondistdeps.py
|
||||
|
||||
%changelog
|
||||
* Wed Jan 01 2020 Miro Hrončok <mhroncok@redhat.com> - 10-1
|
||||
- Handle version ending with ".*" (#1758141)
|
||||
- Handle compatible-release operator "~=" (#1758141)
|
||||
- Use rich deps for semantically versioned dependencies
|
||||
- Match Python version if minor has multiple digits (e.g. 3.10, #1777382)
|
||||
- Only add setuptools requirement for egg-info packages
|
||||
|
||||
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 9-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
|
@ -102,7 +102,7 @@ for f in files:
|
||||
lower.endswith('.egg-info') or \
|
||||
lower.endswith('.dist-info'):
|
||||
# This import is very slow, so only do it if needed
|
||||
from pkg_resources import Distribution, FileMetadata, PathMetadata, Requirement
|
||||
from pkg_resources import Distribution, FileMetadata, PathMetadata, Requirement, parse_version
|
||||
dist_name = basename(f)
|
||||
if isdir(f):
|
||||
path_item = dirname(f)
|
||||
@ -116,7 +116,7 @@ for f in files:
|
||||
# Try to parse the Python version from the path the metadata
|
||||
# resides at (e.g. /usr/lib/pythonX.Y/site-packages/...)
|
||||
import re
|
||||
res = re.search(r"/python(?P<pyver>\d+\.\d)/", path_item)
|
||||
res = re.search(r"/python(?P<pyver>\d+\.\d+)/", path_item)
|
||||
if res:
|
||||
dist.py_version = res.group('pyver')
|
||||
else:
|
||||
@ -184,8 +184,10 @@ for f in files:
|
||||
depsextras.remove(dep)
|
||||
deps = depsextras
|
||||
# console_scripts/gui_scripts entry points need pkg_resources from setuptools
|
||||
if (dist.get_entry_map('console_scripts') or
|
||||
dist.get_entry_map('gui_scripts')):
|
||||
if ((dist.get_entry_map('console_scripts') or
|
||||
dist.get_entry_map('gui_scripts')) and
|
||||
(lower.endswith('.egg') or
|
||||
lower.endswith('.egg-info'))):
|
||||
# stick them first so any more specific requirement overrides it
|
||||
deps.insert(0, Requirement.parse('setuptools'))
|
||||
# add requires/recommends based on egg/dist metadata
|
||||
@ -248,11 +250,35 @@ names.sort()
|
||||
for name in names:
|
||||
if py_deps[name]:
|
||||
# Print out versioned provides, requires, recommends, conflicts
|
||||
spec_list = []
|
||||
for spec in py_deps[name]:
|
||||
if spec[0] == '!=':
|
||||
print('({n} < {v} or {n} >= {v}.0)'.format(n=name, v=spec[1]))
|
||||
spec_list.append('{n} < {v} or {n} >= {v}.0'.format(n=name, v=spec[1]))
|
||||
elif spec[0] == '~=':
|
||||
# Parse the current version
|
||||
next_ver = parse_version(spec[1]).base_version.split('.')
|
||||
# Drop the micro version
|
||||
next_ver = next_ver[0:-1]
|
||||
# Increment the minor version
|
||||
next_ver[-1] = str(int(next_ver[-1]) + 1)
|
||||
next_ver = '.'.join(next_ver)
|
||||
spec_list.append('{n} >= {v} with {n} < {vnext}'.format(n=name, v=spec[1], vnext=next_ver))
|
||||
elif spec[0] == '==' and spec[1].endswith('.*'):
|
||||
# Parse the current version
|
||||
next_ver = parse_version(spec[1]).base_version.split('.')
|
||||
# Drop the micro version from both the version in spec and next_ver
|
||||
next_ver = next_ver[0:-1]
|
||||
spec = (spec[0], '.'.join(next_ver))
|
||||
# Increment the minor version
|
||||
next_ver[-1] = str(int(next_ver[-1]) + 1)
|
||||
next_ver = '.'.join(next_ver)
|
||||
spec_list.append('{n} >= {v} with {n} < {vnext}'.format(n=name, v=spec[1], vnext=next_ver))
|
||||
else:
|
||||
print('{} {} {}'.format(name, spec[0], spec[1]))
|
||||
spec_list.append('{} {} {}'.format(name, spec[0], spec[1]))
|
||||
if len(spec_list) == 1:
|
||||
print(spec_list[0])
|
||||
else:
|
||||
print('({})'.format(' with '.join(spec_list)))
|
||||
else:
|
||||
# Print out unversioned provides, requires, recommends, conflicts
|
||||
print(name)
|
||||
|
Loading…
Reference in New Issue
Block a user