Compare commits

...

2 Commits

Author SHA1 Message Date
Pradyun Gedam f20ab575b9
Merge pull request #11124 from uranusjr/use-contain-for-checking
Allow pre-release to satisfy build requirements
2022-05-16 15:05:40 +01:00
Tzu-ping Chung f7c05a5124 Allow pre-release to satisfy build requirements 2022-05-16 07:40:00 -04:00
3 changed files with 30 additions and 2 deletions

3
news/11123.bugfix.rst Normal file
View File

@ -0,0 +1,3 @@
Allow using a pre-release version to satisfy a build requirement. This helps
manually populated build environments to more accurately detect build-time
requirement conflicts.

View File

@ -187,7 +187,7 @@ class BuildEnvironment:
installed_req_str = f"{req.name}=={dist.version}"
else:
installed_req_str = f"{req.name}==={dist.version}"
if dist.version not in req.specifier:
if not req.specifier.contains(dist.version, prereleases=True):
conflicting.add((installed_req_str, req_str))
# FIXME: Consider direct URL?
return conflicting, missing

View File

@ -5,7 +5,13 @@ import tomli_w
from pip._internal.build_env import BuildEnvironment
from pip._internal.req import InstallRequirement
from tests.lib import PipTestEnvironment, TestData, make_test_finder, path_to_url
from tests.lib import (
PipTestEnvironment,
TestData,
create_basic_wheel_for_package,
make_test_finder,
path_to_url,
)
from tests.lib.path import Path
@ -232,6 +238,25 @@ def test_validate_conflicting_pep517_backend_requirements(
assert result.returncode != 0 and msg in result.stderr, str(result)
def test_pep517_backend_requirements_satisfied_by_prerelease(
script: PipTestEnvironment,
data: TestData,
) -> None:
create_basic_wheel_for_package(script, "myreq", "1.0a1")
script.pip("install", "myreq==1.0a1", "--no-index", "-f", script.scratch_path)
script.pip("install", "test_backend", "--no-index", "-f", data.backends)
project_dir = make_project(
script.temp_path,
requires=["test_backend", "myreq"],
backend="test_backend",
)
project_dir.joinpath("backend_reqs.txt").write_text("myreq")
result = script.pip("install", "--no-index", "--no-build-isolation", project_dir)
assert "Installing backend dependencies:" not in result.stdout
def test_pep517_backend_requirements_already_satisfied(
script: PipTestEnvironment, tmpdir: Path, data: TestData
) -> None: