Skip to content

Commit fa9cd5f

Browse files
sdispaterabn
authored andcommitted
Fix incorrect package being selected with transitive markers.
1 parent a5d562e commit fa9cd5f

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

poetry/mixology/version_solver.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -338,15 +338,15 @@ def _get_min(dependency):
338338
if dependency.name in self._use_latest:
339339
# If we're forced to use the latest version of a package, it effectively
340340
# only has one version to choose from.
341-
return 1
341+
return not dependency.marker.is_any(), 1
342342

343343
locked = self._get_locked(dependency)
344344
if locked and (
345345
dependency.constraint.allows(locked.version)
346346
or locked.is_prerelease()
347347
and dependency.constraint.allows(locked.version.next_patch)
348348
):
349-
return 1
349+
return not dependency.marker.is_any(), 1
350350

351351
# VCS, URL, File or Directory dependencies
352352
# represent a single version
@@ -356,12 +356,15 @@ def _get_min(dependency):
356356
or dependency.is_file()
357357
or dependency.is_directory()
358358
):
359-
return 1
359+
return not dependency.marker.is_any(), 1
360360

361361
try:
362-
return len(self._provider.search_for(dependency))
362+
return (
363+
not dependency.marker.is_any(),
364+
len(self._provider.search_for(dependency)),
365+
)
363366
except ValueError:
364-
return 0
367+
return not dependency.marker.is_any(), 0
365368

366369
if len(unsatisfied) == 1:
367370
dependency = unsatisfied[0]

tests/puzzle/test_solver.py

+50
Original file line numberDiff line numberDiff line change
@@ -2741,3 +2741,53 @@ def test_solver_can_resolve_python_restricted_package_dependencies(
27412741
{"job": "install", "package": pre_commit},
27422742
],
27432743
)
2744+
2745+
2746+
def test_solver_should_not_raise_errors_for_irrelevant_transitive_python_constraints(
2747+
solver, repo, package
2748+
):
2749+
package.python_versions = "~2.7 || ^3.5"
2750+
solver.provider.set_package_python_versions("~2.7 || ^3.5")
2751+
package.add_dependency(Factory.create_dependency("virtualenv", "^20.4.3"))
2752+
package.add_dependency(
2753+
Factory.create_dependency("pre-commit", {"version": "^2.6", "python": "^3.6.1"})
2754+
)
2755+
2756+
virtualenv = get_package("virtualenv", "20.4.3")
2757+
virtualenv.python_versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
2758+
virtualenv.add_dependency(
2759+
Factory.create_dependency(
2760+
"importlib-resources", {"version": "*", "markers": 'python_version < "3.7"'}
2761+
)
2762+
)
2763+
2764+
pre_commit = Package("pre-commit", "2.7.1")
2765+
pre_commit.python_versions = ">=3.6.1"
2766+
pre_commit.add_dependency(
2767+
Factory.create_dependency(
2768+
"importlib-resources", {"version": "*", "markers": 'python_version < "3.7"'}
2769+
)
2770+
)
2771+
2772+
importlib_resources = get_package("importlib-resources", "5.1.2")
2773+
importlib_resources.python_versions = ">=3.6"
2774+
2775+
importlib_resources_3_2_1 = get_package("importlib-resources", "3.2.1")
2776+
importlib_resources_3_2_1.python_versions = (
2777+
"!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
2778+
)
2779+
2780+
repo.add_package(virtualenv)
2781+
repo.add_package(pre_commit)
2782+
repo.add_package(importlib_resources)
2783+
repo.add_package(importlib_resources_3_2_1)
2784+
ops = solver.solve()
2785+
2786+
check_solver_result(
2787+
ops,
2788+
[
2789+
{"job": "install", "package": importlib_resources_3_2_1},
2790+
{"job": "install", "package": pre_commit},
2791+
{"job": "install", "package": virtualenv},
2792+
],
2793+
)

0 commit comments

Comments
 (0)