From d24c18f4c365037b9ba0e5dde5b669b39a89d910 Mon Sep 17 00:00:00 2001 From: Liam Wilson Date: Fri, 2 Jul 2021 15:42:56 -0700 Subject: [PATCH] Do not use `[python-setup].resolve_all_constraints` when using `platforms` (Cherry-pick of #12268) (#12269) [ci skip-rust] [ci skip-build-wheels] --- .../python/util_rules/pex_from_targets.py | 4 ++- .../util_rules/pex_from_targets_test.py | 33 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/python/pants/backend/python/util_rules/pex_from_targets.py b/src/python/pants/backend/python/util_rules/pex_from_targets.py index 2ca987de6fc..0e7de3a820d 100644 --- a/src/python/pants/backend/python/util_rules/pex_from_targets.py +++ b/src/python/pants/backend/python/util_rules/pex_from_targets.py @@ -271,7 +271,9 @@ async def pex_from_targets(request: PexFromTargetsRequest, python_setup: PythonS f"entries for the following requirements: {', '.join(unconstrained_projects)}" ) - if python_setup.resolve_all_constraints: + # NB: it isn't safe to resolve against the whole constraints file if + # platforms are in use. See https://github.com/pantsbuild/pants/issues/12222. + if python_setup.resolve_all_constraints and not request.platforms: if unconstrained_projects: logger.warning( "Ignoring `[python_setup].resolve_all_constraints` option because constraints " diff --git a/src/python/pants/backend/python/util_rules/pex_from_targets_test.py b/src/python/pants/backend/python/util_rules/pex_from_targets_test.py index 5d1ab640e48..0ec61e6a4e7 100644 --- a/src/python/pants/backend/python/util_rules/pex_from_targets_test.py +++ b/src/python/pants/backend/python/util_rules/pex_from_targets_test.py @@ -16,7 +16,7 @@ from pants.backend.python.target_types import PythonLibrary, PythonRequirementLibrary from pants.backend.python.util_rules import pex_from_targets -from pants.backend.python.util_rules.pex import Pex, PexRequest, PexRequirements +from pants.backend.python.util_rules.pex import Pex, PexPlatforms, PexRequest, PexRequirements from pants.backend.python.util_rules.pex_from_targets import PexFromTargetsRequest from pants.build_graph.address import Address from pants.engine.internals.scheduler import ExecutionError @@ -267,3 +267,34 @@ def get_pex_request( # Shouldn't error, as we don't explicitly set --resolve-all-constraints. get_pex_request(None, resolve_all_constraints=None) + + +def test_issue_12222(rule_runner: RuleRunner) -> None: + rule_runner.write_files( + { + "constraints.txt": "foo==1.0\nbar==1.0", + "BUILD": dedent( + """ + python_requirement_library(name="foo",requirements=["foo"]) + python_requirement_library(name="bar",requirements=["bar"]) + python_library(name="lib",sources=[],dependencies=[":foo"]) + """ + ), + } + ) + request = PexFromTargetsRequest( + [Address("", target_name="lib")], + output_filename="demo.pex", + internal_only=False, + platforms=PexPlatforms(["some-platform-x86_64"]), + ) + rule_runner.set_options( + [ + "--python-setup-requirement-constraints=constraints.txt", + "--python-setup-resolve-all-constraints", + ] + ) + result = rule_runner.request(PexRequest, [request]) + + assert result.repository_pex is None + assert result.requirements == PexRequirements(["foo"])