From ff085a044d19dd40aaeb236a11fe024c064ef16a Mon Sep 17 00:00:00 2001 From: Miro Hrončok Date: Jun 24 2019 12:44:19 +0000 Subject: Canonicalize Python versions and properly handle != spec Fixes https://github.com/rpm-software-management/rpm/issues/639 From upstream PR: https://github.com/rpm-software-management/rpm/pull/757 --- diff --git a/python-rpm-generators.spec b/python-rpm-generators.spec index f17486b..4955850 100644 --- a/python-rpm-generators.spec +++ b/python-rpm-generators.spec @@ -4,7 +4,7 @@ Name: python-rpm-generators Summary: Dependency generators for Python RPMs -Version: 8 +Version: 9 Release: 1%{?dist} # Originally all those files were part of RPM, so license is kept here @@ -49,6 +49,9 @@ install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} pythondeps.sh pythondistdeps.py %{_rpmconfigdir}/pythondistdeps.py %changelog +* Mon Jun 24 2019 Tomas Orsava - 9-1 +- Canonicalize Python versions and properly handle != spec + * Wed Apr 17 2019 Miro Hrončok - 8-1 - console_scripts entry points to require setuptools https://github.com/rpm-software-management/rpm/pull/666 diff --git a/pythondistdeps.py b/pythondistdeps.py index d81cd4b..1d3535b 100755 --- a/pythondistdeps.py +++ b/pythondistdeps.py @@ -151,7 +151,10 @@ for f in files: if legacy_name not in py_deps: py_deps[legacy_name] = [] if dist.version: - spec = ('==', dist.version) + version = dist.version + while version.endswith('.0'): + version = version[:-2] + spec = ('==', version) if spec not in py_deps[name]: if not legacy: py_deps[name].append(spec) @@ -195,11 +198,12 @@ for f in files: else: name = 'python{}dist({})'.format(dist.py_version, dep.key) for spec in dep.specs: - if spec[0] != '!=': - if name not in py_deps: - py_deps[name] = [] - if spec not in py_deps[name]: - py_deps[name].append(spec) + while spec[1].endswith('.0'): + spec = (spec[0], spec[1][:-2]) + if name not in py_deps: + py_deps[name] = [] + if spec not in py_deps[name]: + py_deps[name].append(spec) if not dep.specs: py_deps[name] = [] # Unused, for automatic sub-package generation based on 'extras' from egg/dist metadata @@ -245,7 +249,10 @@ for name in names: if py_deps[name]: # Print out versioned provides, requires, recommends, conflicts for spec in py_deps[name]: - print('{} {} {}'.format(name, spec[0], spec[1])) + if spec[0] == '!=': + print('({n} < {v} or {n} >= {v}.0)'.format(n=name, v=spec[1])) + else: + print('{} {} {}'.format(name, spec[0], spec[1])) else: # Print out unversioned provides, requires, recommends, conflicts print(name)