Support the extras configuration option of tox in %pyproject_buildrequires -t

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1877977
This commit is contained in:
Miro Hrončok 2020-09-30 22:12:03 +02:00
parent 0498ef29dd
commit 9f3eea2ae5
3 changed files with 68 additions and 11 deletions

View File

@ -46,7 +46,7 @@ BuildRequires: (python3dist(importlib-metadata) if python3 < 3.8)
BuildRequires: python3dist(pip) BuildRequires: python3dist(pip)
BuildRequires: python3dist(setuptools) BuildRequires: python3dist(setuptools)
BuildRequires: python3dist(toml) BuildRequires: python3dist(toml)
BuildRequires: python3dist(tox-current-env) >= 0.0.2 BuildRequires: python3dist(tox-current-env) >= 0.0.3
BuildRequires: python3dist(wheel) BuildRequires: python3dist(wheel)
%endif %endif
@ -96,6 +96,8 @@ export HOSTNAME="rpmbuild" # to speedup tox in network-less mock, see rhbz#1856
%changelog %changelog
* Tue Sep 29 2020 Lumír Balhar <lbalhar@redhat.com> - 0-30 * Tue Sep 29 2020 Lumír Balhar <lbalhar@redhat.com> - 0-30
- Process RECORD files in %%pyproject_install and remove them - Process RECORD files in %%pyproject_install and remove them
- Support the extras configuration option of tox in %%pyproject_buildrequires -t
- Fixes: rhbz#1877977
* Wed Sep 23 2020 Miro Hrončok <mhroncok@redhat.com> - 0-29 * Wed Sep 23 2020 Miro Hrončok <mhroncok@redhat.com> - 0-29
- Check the requirements after installing "requires_for_build_wheel" - Check the requirements after installing "requires_for_build_wheel"

View File

@ -52,17 +52,25 @@ class Requirements:
def __init__(self, get_installed_version, extras='', def __init__(self, get_installed_version, extras='',
generate_extras=False, python3_pkgversion='3'): generate_extras=False, python3_pkgversion='3'):
self.get_installed_version = get_installed_version self.get_installed_version = get_installed_version
self.extras = set()
if extras: if extras:
self.marker_envs = [{'extra': e.strip()} for e in extras.split(',')] self.add_extras(*extras.split(','))
else:
self.marker_envs = [{'extra': ''}]
self.missing_requirements = False self.missing_requirements = False
self.generate_extras = generate_extras self.generate_extras = generate_extras
self.python3_pkgversion = python3_pkgversion self.python3_pkgversion = python3_pkgversion
def add_extras(self, *extras):
self.extras |= set(e.strip() for e in extras)
@property
def marker_envs(self):
if self.extras:
return [{'extra': e} for e in sorted(self.extras)]
return [{'extra': ''}]
def evaluate_all_environamnets(self, requirement): def evaluate_all_environamnets(self, requirement):
for marker_env in self.marker_envs: for marker_env in self.marker_envs:
if requirement.marker.evaluate(environment=marker_env): if requirement.marker.evaluate(environment=marker_env):
@ -232,12 +240,14 @@ def parse_tox_requires_lines(lines):
def generate_tox_requirements(toxenv, requirements): def generate_tox_requirements(toxenv, requirements):
requirements.add('tox-current-env >= 0.0.2', source='tox itself') requirements.add('tox-current-env >= 0.0.3', source='tox itself')
requirements.check(source='tox itself') requirements.check(source='tox itself')
with tempfile.NamedTemporaryFile('r') as depfile: with tempfile.NamedTemporaryFile('r') as deps, tempfile.NamedTemporaryFile('r') as extras:
r = subprocess.run( r = subprocess.run(
[sys.executable, '-m', 'tox', '--print-deps-to-file', [sys.executable, '-m', 'tox',
depfile.name, '-qre', toxenv], '--print-deps-to', deps.name,
'--print-extras-to', extras.name,
'-qre', toxenv],
check=False, check=False,
encoding='utf-8', encoding='utf-8',
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@ -247,8 +257,9 @@ def generate_tox_requirements(toxenv, requirements):
print_err(r.stdout, end='') print_err(r.stdout, end='')
r.check_returncode() r.check_returncode()
deplines = depfile.read().splitlines() deplines = deps.read().splitlines()
packages = parse_tox_requires_lines(deplines) packages = parse_tox_requires_lines(deplines)
requirements.add_extras(*extras.read().splitlines())
requirements.extend(packages, requirements.extend(packages,
source=f'tox --print-deps-only: {toxenv}') source=f'tox --print-deps-only: {toxenv}')

View File

@ -290,7 +290,7 @@ Tox dependencies:
setuptools: 50 setuptools: 50
wheel: 1 wheel: 1
tox: 3.5.3 tox: 3.5.3
tox-current-env: 0.0.2 tox-current-env: 0.0.3
toxenv: py3 toxenv: py3
setup.py: | setup.py: |
from setuptools import setup from setuptools import setup
@ -312,8 +312,52 @@ Tox dependencies:
python3dist(setuptools) >= 40.8 python3dist(setuptools) >= 40.8
python3dist(wheel) python3dist(wheel)
python3dist(wheel) python3dist(wheel)
python3dist(tox-current-env) >= 0.0.2 python3dist(tox-current-env) >= 0.0.3
python3dist(toxdep1) python3dist(toxdep1)
python3dist(toxdep2) python3dist(toxdep2)
python3dist(inst) python3dist(inst)
result: 0 result: 0
Tox extras:
installed:
setuptools: 50
wheel: 1
tox: 3.5.3
tox-current-env: 0.0.3
toxenv: py3
setup.py: |
from setuptools import setup
setup(
name='test',
version='0.1',
install_requires=['inst'],
extras_require={
'extra1': ['dep11 > 11', 'dep12'],
'extra2': ['dep21', 'dep22', 'dep23'],
'nope': ['nopedep'],
}
)
tox.ini: |
[tox]
envlist = py36,py37,py38
[testenv]
deps =
toxdep
extras =
extra2
extra1
commands =
true
expected: |
python3dist(setuptools) >= 40.8
python3dist(wheel)
python3dist(wheel)
python3dist(tox-current-env) >= 0.0.3
python3dist(toxdep)
python3dist(inst)
python3dist(dep11) > 11
python3dist(dep12)
python3dist(dep21)
python3dist(dep22)
python3dist(dep23)
result: 0