From e33d4e94c86a813bc66b8efa6e01b74045e5324a Mon Sep 17 00:00:00 2001 From: Tomas Orsava Date: Apr 30 2020 20:24:44 +0000 Subject: scripts/pythondistdeps: Add option to generate major-version provides only for specified Python versions --- diff --git a/pythondistdeps.py b/pythondistdeps.py index 344334b..8d7bf2d 100755 --- a/pythondistdeps.py +++ b/pythondistdeps.py @@ -150,7 +150,11 @@ group.add_argument('-R', '--requires', action='store_true', help='Print Requires group.add_argument('-r', '--recommends', action='store_true', help='Print Recommends') group.add_argument('-C', '--conflicts', action='store_true', help='Print Conflicts') group.add_argument('-E', '--extras', action='store_true', help='Print Extras') -parser.add_argument('-M', '--majorver-provides', action='store_true', help='Print extra Provides with Python major version only') +group_majorver = parser.add_mutually_exclusive_group() +group_majorver.add_argument('-M', '--majorver-provides', action='store_true', help='Print extra Provides with Python major version only') +group_majorver.add_argument('--majorver-provides-versions', action='append', + help='Print extra Provides with Python major version only for listed ' + 'Python VERSIONS (appended or comma separated without spaces, e.g. 2.7,3.9)') parser.add_argument('-m', '--majorver-only', action='store_true', help='Print Provides/Requires with Python major version only') parser.add_argument('-L', '--legacy-provides', action='store_true', help='Print extra legacy pythonegg Provides') parser.add_argument('-l', '--legacy', action='store_true', help='Print legacy pythonegg Provides/Requires instead') @@ -160,6 +164,11 @@ args = parser.parse_args() py_abi = args.requires py_deps = {} +if args.majorver_provides_versions: + # Go through the arguments (can be specified multiple times), + # and parse individual versions (can be comma-separated) + args.majorver_provides_versions = [v for vstring in args.majorver_provides_versions + for v in vstring.split(",")] for f in (args.files or stdin.readlines()): f = f.strip() @@ -233,7 +242,8 @@ for f in (args.files or stdin.readlines()): # See https://bugzilla.redhat.com/show_bug.cgi?id=1791530 normalized_name = normalize_name(dist.project_name) - if args.majorver_provides or args.majorver_only or args.legacy_provides or args.legacy: + if args.majorver_provides or args.majorver_provides_versions or \ + args.majorver_only or args.legacy_provides or args.legacy: # Get the Python major version pyver_major = dist.py_version.split('.')[0] if args.provides: @@ -250,7 +260,9 @@ for f in (args.files or stdin.readlines()): name_ = 'python{}dist({})'.format(dist.py_version, normalized_name) if name_ not in py_deps: py_deps[name_] = [] - if args.majorver_provides or args.majorver_only: + if args.majorver_provides or args.majorver_only or \ + (args.majorver_provides_versions and + dist.py_version in args.majorver_provides_versions): pymajor_name = 'python{}dist({})'.format(pyver_major, dist.key) if pymajor_name not in py_deps: py_deps[pymajor_name] = [] @@ -269,7 +281,9 @@ for f in (args.files or stdin.readlines()): py_deps[name].append(spec) if name != name_: py_deps[name_].append(spec) - if args.majorver_provides: + if args.majorver_provides or \ + (args.majorver_provides_versions and + dist.py_version in args.majorver_provides_versions): py_deps[pymajor_name].append(spec) if pymajor_name != pymajor_name_: py_deps[pymajor_name_].append(spec) diff --git a/tests/data/scripts_pythondistdeps/test-data.yaml b/tests/data/scripts_pythondistdeps/test-data.yaml index ae4295a..dcfa080 100644 --- a/tests/data/scripts_pythondistdeps/test-data.yaml +++ b/tests/data/scripts_pythondistdeps/test-data.yaml @@ -478,3 +478,365 @@ python3.9dist(simplejson) = 3.16 python3dist(simplejson) = 3.16 requires: python(abi) = 3.9 + --provides --majorver-provides-versions 3.9 --majorver-provides-versions 2.7: + usr/lib/python2.7/site-packages/attrs-19.1.0-py2.7.egg-info: + provides: |- + python2.7dist(attrs) = 19.1 + python2dist(attrs) = 19.1 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/kubernetes-11.0.0b2.dist-info: + provides: |- + python2.7dist(kubernetes) = 11~b2 + python2dist(kubernetes) = 11~b2 + requires: |- + python(abi) = 2.7 + python2.7dist(certifi) >= 14.5.14 + python2.7dist(google-auth) >= 1.0.1 + python2.7dist(ipaddress) >= 1.0.17 + python2.7dist(python-dateutil) >= 2.5.3 + python2.7dist(pyyaml) >= 3.12 + python2.7dist(requests) + python2.7dist(requests-oauthlib) + python2.7dist(setuptools) >= 21 + python2.7dist(six) >= 1.9 + python2.7dist(urllib3) >= 1.24.2 + ((python2.7dist(websocket-client) < 0.40 or python2.7dist(websocket-client) > 0.40) with (python2.7dist(websocket-client) < 0.41 or python2.7dist(websocket-client) > 0.42) with (python2.7dist(websocket-client) < 0.42 or python2.7dist(websocket-client) > 0.43) with python2.7dist(websocket-client) >= 0.32) + usr/lib/python2.7/site-packages/mistune-0.8.4-py2.7.egg-info: + provides: |- + python2.7dist(mistune) = 0.8.4 + python2dist(mistune) = 0.8.4 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/packaging-19.0.dist-info: + provides: |- + python2.7dist(packaging) = 19 + python2dist(packaging) = 19 + requires: |- + python(abi) = 2.7 + python2.7dist(pyparsing) >= 2.0.2 + python2.7dist(six) + usr/lib/python2.7/site-packages/pip-19.1.1.dist-info: + provides: |- + python2.7dist(pip) = 19.1.1 + python2dist(pip) = 19.1.1 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/pyparsing-2.4.0.dist-info: + provides: |- + python2.7dist(pyparsing) = 2.4 + python2dist(pyparsing) = 2.4 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/setuptools-41.6.0-py2.7.egg-info: + provides: |- + python2.7dist(setuptools) = 41.6 + python2dist(setuptools) = 41.6 + requires: |- + python(abi) = 2.7 + python2.7dist(setuptools) + usr/lib/python2.7/site-packages/setuptools-41.6.0.dist-info: + provides: |- + python2.7dist(setuptools) = 41.6 + python2dist(setuptools) = 41.6 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/six-1.12.0.dist-info: + provides: |- + python2.7dist(six) = 1.12 + python2dist(six) = 1.12 + requires: python(abi) = 2.7 + usr/lib/python3.11/site-packages/pip-20.0.2-py3.11.egg-info: + provides: python3.11dist(pip) = 20.0.2 + requires: |- + python(abi) = 3.11 + python3.11dist(setuptools) + usr/lib/python3.7/site-packages/astroid-2.3.3.dist-info: + provides: python3.7dist(astroid) = 2.3.3 + requires: |- + python(abi) = 3.7 + (python3.7dist(lazy-object-proxy) >= 1.4 with python3.7dist(lazy-object-proxy) < 1.5) + (python3.7dist(six) >= 1.12 with python3.7dist(six) < 2) + (python3.7dist(typed-ast) < 1.5 with python3.7dist(typed-ast) >= 1.4) + (python3.7dist(wrapt) >= 1.11 with python3.7dist(wrapt) < 1.12) + usr/lib/python3.7/site-packages/packaging-19.0.dist-info: + provides: python3.7dist(packaging) = 19 + requires: |- + python(abi) = 3.7 + python3.7dist(pyparsing) >= 2.0.2 + python3.7dist(six) + usr/lib/python3.7/site-packages/pip-19.1.1.dist-info: + provides: python3.7dist(pip) = 19.1.1 + requires: python(abi) = 3.7 + usr/lib/python3.7/site-packages/pyparsing-2.4.0.dist-info: + provides: python3.7dist(pyparsing) = 2.4 + requires: python(abi) = 3.7 + usr/lib/python3.9/site-packages/attrs-19.1.0-py3.9.egg-info: + provides: |- + python3.9dist(attrs) = 19.1 + python3dist(attrs) = 19.1 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/mistune-0.8.4-py3.9.egg-info: + provides: |- + python3.9dist(mistune) = 0.8.4 + python3dist(mistune) = 0.8.4 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/packaging-20.1.dist-info: + provides: |- + python3.9dist(packaging) = 20.1 + python3dist(packaging) = 20.1 + requires: |- + python(abi) = 3.9 + python3.9dist(pyparsing) >= 2.0.2 + python3.9dist(six) + usr/lib/python3.9/site-packages/pip-20.0.2.dist-info: + provides: |- + python3.9dist(pip) = 20.0.2 + python3dist(pip) = 20.0.2 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/pyparsing-2.4.0.dist-info: + provides: |- + python3.9dist(pyparsing) = 2.4 + python3dist(pyparsing) = 2.4 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/setuptools-41.6.0-py3.9.egg-info: + provides: |- + python3.9dist(setuptools) = 41.6 + python3dist(setuptools) = 41.6 + requires: |- + python(abi) = 3.9 + python3.9dist(setuptools) + usr/lib/python3.9/site-packages/setuptools-41.6.0.dist-info: + provides: |- + python3.9dist(setuptools) = 41.6 + python3dist(setuptools) = 41.6 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/six-1.12.0.dist-info: + provides: |- + python3.9dist(six) = 1.12 + python3dist(six) = 1.12 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/tox-3.14.0.dist-info: + provides: |- + python3.9dist(tox) = 3.14 + python3dist(tox) = 3.14 + requires: |- + python(abi) = 3.9 + (python3.9dist(filelock) < 4 with python3.9dist(filelock) >= 3) + python3.9dist(packaging) >= 14 + (python3.9dist(pluggy) < 1 with python3.9dist(pluggy) >= 0.12) + (python3.9dist(py) < 2 with python3.9dist(py) >= 1.4.17) + (python3.9dist(six) < 2 with python3.9dist(six) >= 1) + python3.9dist(toml) >= 0.9.4 + python3.9dist(virtualenv) >= 14 + usr/lib/python3.9/site-packages/urllib3-1.25.7-py3.9.egg-info: + provides: |- + python3.9dist(urllib3) = 1.25.7 + python3dist(urllib3) = 1.25.7 + requires: python(abi) = 3.9 + usr/lib/python3.9/site-packages/zope.schema-4.4.2-py3.9.egg-info: + provides: |- + python3.9dist(zope.schema) = 4.4.2 + python3dist(zope.schema) = 4.4.2 + requires: |- + python(abi) = 3.9 + python3.9dist(setuptools) + python3.9dist(zope.event) + python3.9dist(zope.interface) >= 3.6 + usr/lib64/python2.7/site-packages/MarkupSafe-1.1.1.dist-info: + provides: |- + python2.7dist(markupsafe) = 1.1.1 + python2dist(markupsafe) = 1.1.1 + requires: python(abi) = 2.7 + usr/lib64/python2.7/site-packages/backports.range-3.7.2-py2.7.egg-info: + provides: |- + python2.7dist(backports.range) = 3.7.2 + python2dist(backports.range) = 3.7.2 + requires: python(abi) = 2.7 + usr/lib64/python2.7/site-packages/lxml-4.4.0.dist-info: + provides: |- + python2.7dist(lxml) = 4.4 + python2dist(lxml) = 4.4 + requires: python(abi) = 2.7 + usr/lib64/python2.7/site-packages/numpy-1.16.4.dist-info: + provides: |- + python2.7dist(numpy) = 1.16.4 + python2dist(numpy) = 1.16.4 + requires: python(abi) = 2.7 + usr/lib64/python2.7/site-packages/numpy_stl-2.11.2-py2.7.egg-info: + provides: |- + python2.7dist(numpy-stl) = 2.11.2 + python2dist(numpy-stl) = 2.11.2 + requires: |- + python(abi) = 2.7 + python2.7dist(numpy) + python2.7dist(python-utils) >= 1.6.2 + python2.7dist(setuptools) + --provides --majorver-provides-versions 3.9,2.7: + usr/lib/python2.7/site-packages/tox-3.14.0.dist-info: + provides: |- + python2.7dist(tox) = 3.14 + python2dist(tox) = 3.14 + requires: |- + python(abi) = 2.7 + (python2.7dist(filelock) < 4 with python2.7dist(filelock) >= 3) + (python2.7dist(importlib-metadata) < 1 with python2.7dist(importlib-metadata) >= 0.12) + python2.7dist(packaging) >= 14 + (python2.7dist(pluggy) < 1 with python2.7dist(pluggy) >= 0.12) + (python2.7dist(py) < 2 with python2.7dist(py) >= 1.4.17) + (python2.7dist(six) < 2 with python2.7dist(six) >= 1) + python2.7dist(toml) >= 0.9.4 + python2.7dist(virtualenv) >= 14 + usr/lib/python2.7/site-packages/urllib3-1.25.7-py2.7.egg-info: + provides: |- + python2.7dist(urllib3) = 1.25.7 + python2dist(urllib3) = 1.25.7 + requires: python(abi) = 2.7 + usr/lib/python2.7/site-packages/zope.component-4.3.0-py2.7.egg-info: + provides: |- + python2.7dist(zope.component) = 4.3 + python2dist(zope.component) = 4.3 + requires: |- + python(abi) = 2.7 + python2.7dist(setuptools) + python2.7dist(zope.event) + python2.7dist(zope.interface) >= 4.1 + usr/lib/python3.10/site-packages/setuptools-41.6.0-py3.10.egg-info: + provides: python3.10dist(setuptools) = 41.6 + requires: |- + python(abi) = 3.10 + python3.10dist(setuptools) + usr/lib/python3.7/site-packages/setuptools-41.6.0-py3.7.egg-info: + provides: python3.7dist(setuptools) = 41.6 + requires: |- + python(abi) = 3.7 + python3.7dist(setuptools) + usr/lib/python3.7/site-packages/setuptools-41.6.0.dist-info: + provides: python3.7dist(setuptools) = 41.6 + requires: python(abi) = 3.7 + usr/lib/python3.7/site-packages/six-1.12.0.dist-info: + provides: python3.7dist(six) = 1.12 + requires: python(abi) = 3.7 + usr/lib/python3.7/site-packages/tox-3.14.0.dist-info: + provides: python3.7dist(tox) = 3.14 + requires: |- + python(abi) = 3.7 + (python3.7dist(filelock) < 4 with python3.7dist(filelock) >= 3) + (python3.7dist(importlib-metadata) < 1 with python3.7dist(importlib-metadata) >= 0.12) + python3.7dist(packaging) >= 14 + (python3.7dist(pluggy) < 1 with python3.7dist(pluggy) >= 0.12) + (python3.7dist(py) < 2 with python3.7dist(py) >= 1.4.17) + (python3.7dist(six) < 2 with python3.7dist(six) >= 1) + python3.7dist(toml) >= 0.9.4 + python3.7dist(virtualenv) >= 14 + usr/lib64/python2.7/site-packages/scipy-1.2.1.dist-info: + provides: |- + python2.7dist(scipy) = 1.2.1 + python2dist(scipy) = 1.2.1 + requires: |- + python(abi) = 2.7 + python2.7dist(numpy) >= 1.8.2 + usr/lib64/python2.7/site-packages/simplejson-3.16.0-py2.7.egg-info: + provides: |- + python2.7dist(simplejson) = 3.16 + python2dist(simplejson) = 3.16 + requires: python(abi) = 2.7 + usr/lib64/python3.7/site-packages/MarkupSafe-1.1.1.dist-info: + provides: python3.7dist(markupsafe) = 1.1.1 + requires: python(abi) = 3.7 + usr/lib64/python3.7/site-packages/PyQt5_sip-4.19.19.dist-info: + provides: python3.7dist(pyqt5-sip) = 4.19.19 + requires: python(abi) = 3.7 + usr/lib64/python3.7/site-packages/PyQtWebEngine-5.12.1.dist-info: + provides: python3.7dist(pyqtwebengine) = 5.12.1 + requires: |- + python(abi) = 3.7 + python3.7dist(pyqt5) >= 5.12 + usr/lib64/python3.7/site-packages/backports.range-3.7.2-py3.7.egg-info: + provides: python3.7dist(backports.range) = 3.7.2 + requires: python(abi) = 3.7 + usr/lib64/python3.7/site-packages/lxml-4.4.0.dist-info: + provides: python3.7dist(lxml) = 4.4 + requires: python(abi) = 3.7 + usr/lib64/python3.7/site-packages/numpy-1.17.4.dist-info: + provides: python3.7dist(numpy) = 1.17.4 + requires: python(abi) = 3.7 + usr/lib64/python3.7/site-packages/numpy_stl-2.11.2-py3.7.egg-info: + provides: python3.7dist(numpy-stl) = 2.11.2 + requires: |- + python(abi) = 3.7 + python3.7dist(numpy) + python3.7dist(python-utils) >= 1.6.2 + python3.7dist(setuptools) + usr/lib64/python3.7/site-packages/scipy-1.2.1.dist-info: + provides: python3.7dist(scipy) = 1.2.1 + requires: |- + python(abi) = 3.7 + python3.7dist(numpy) >= 1.8.2 + usr/lib64/python3.7/site-packages/simplejson-3.16.0-py3.7.egg-info: + provides: python3.7dist(simplejson) = 3.16 + requires: python(abi) = 3.7 + usr/lib64/python3.9/site-packages/PyQtWebEngine-5.12.1.dist-info: + provides: |- + python3.9dist(pyqtwebengine) = 5.12.1 + python3dist(pyqtwebengine) = 5.12.1 + requires: |- + python(abi) = 3.9 + python3.9dist(pyqt5) >= 5.12 + usr/lib64/python3.9/site-packages/backports.range-3.7.2-py3.9.egg-info: + provides: |- + python3.9dist(backports.range) = 3.7.2 + python3dist(backports.range) = 3.7.2 + requires: python(abi) = 3.9 + usr/lib64/python3.9/site-packages/numpy_stl-2.11.2-py3.9.egg-info: + provides: |- + python3.9dist(numpy-stl) = 2.11.2 + python3dist(numpy-stl) = 2.11.2 + requires: |- + python(abi) = 3.9 + python3.9dist(numpy) + python3.9dist(python-utils) >= 1.6.2 + python3.9dist(setuptools) + usr/lib64/python3.9/site-packages/simplejson-3.16.0-py3.9.egg-info: + provides: |- + python3.9dist(simplejson) = 3.16 + python3dist(simplejson) = 3.16 + requires: python(abi) = 3.9 + --provides --majorver-provides-versions 3.9,2.7 --majorver-provides-versions 3.10: + usr/lib/python2.7/site-packages/zope.interface-4.6.0.dist-info: + provides: |- + python2.7dist(zope.interface) = 4.6 + python2dist(zope.interface) = 4.6 + requires: |- + python(abi) = 2.7 + python2.7dist(setuptools) + usr/lib/python3.10/site-packages/setuptools-41.6.0-py3.10.egg-info: + provides: |- + python3.10dist(setuptools) = 41.6 + python3dist(setuptools) = 41.6 + requires: |- + python(abi) = 3.10 + python3.10dist(setuptools) + usr/lib/python3.11/site-packages/pip-20.0.2-py3.11.egg-info: + provides: python3.11dist(pip) = 20.0.2 + requires: |- + python(abi) = 3.11 + python3.11dist(setuptools) + usr/lib64/python3.7/site-packages/lxml-4.4.0.dist-info: + provides: python3.7dist(lxml) = 4.4 + requires: python(abi) = 3.7 + usr/lib64/python3.9/site-packages/simplejson-3.16.0-py3.9.egg-info: + provides: |- + python3.9dist(simplejson) = 3.16 + python3dist(simplejson) = 3.16 + requires: python(abi) = 3.9 + --provides --majorver-provides-versions 3.9: + usr/lib/python2.7/site-packages/zope.interface-4.6.0.dist-info: + provides: |- + python2.7dist(zope.interface) = 4.6 + requires: |- + python(abi) = 2.7 + python2.7dist(setuptools) + usr/lib64/python3.7/site-packages/lxml-4.4.0.dist-info: + provides: python3.7dist(lxml) = 4.4 + requires: python(abi) = 3.7 + usr/lib64/python3.9/site-packages/simplejson-3.16.0-py3.9.egg-info: + provides: |- + python3.9dist(simplejson) = 3.16 + python3dist(simplejson) = 3.16 + requires: python(abi) = 3.9