Skip to content

Commit 4cf319b

Browse files
committed
fix calculation of override markers when merging override packages
1 parent 2ecc383 commit 4cf319b

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

src/poetry/puzzle/solver.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ def _solve_in_compatibility_mode(
158158
new_packages = self._solve()
159159
override_packages.append((override, new_packages))
160160

161-
return merge_override_packages(override_packages)
161+
return merge_override_packages(
162+
override_packages, self._package.python_constraint
163+
)
162164

163165
def _solve(self) -> dict[Package, TransitivePackageInfo]:
164166
if self._provider._overrides:
@@ -419,6 +421,7 @@ def merge_override_packages(
419421
dict[Package, dict[str, Dependency]], dict[Package, TransitivePackageInfo]
420422
]
421423
],
424+
python_constraint: VersionConstraint,
422425
) -> dict[Package, TransitivePackageInfo]:
423426
result: dict[Package, TransitivePackageInfo] = {}
424427
all_packages: dict[
@@ -429,6 +432,7 @@ def merge_override_packages(
429432
for deps in override.values():
430433
for dep in deps.values():
431434
override_marker = override_marker.intersect(dep.marker.without_extras())
435+
override_marker = simplify_marker(override_marker, python_constraint)
432436
for package, info in o_packages.items():
433437
for group, marker in info.markers.items():
434438
# `override_marker` is often a SingleMarker or a MultiMarker,

tests/puzzle/test_solver_internals.py

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
from typing import TYPE_CHECKING
44

5+
import pytest
6+
57
from packaging.utils import canonicalize_name
8+
from poetry.core.constraints.version import parse_constraint
69
from poetry.core.packages.dependency import Dependency
710
from poetry.core.packages.package import Package
811
from poetry.core.version.markers import AnyMarker
@@ -378,7 +381,8 @@ def test_merge_override_packages_restricted(package: ProjectPackage) -> None:
378381
)
379382
},
380383
),
381-
]
384+
],
385+
parse_constraint("*"),
382386
)
383387
assert len(packages) == 1
384388
assert packages[a].groups == {"main"}
@@ -416,7 +420,8 @@ def test_merge_override_packages_extras(package: ProjectPackage) -> None:
416420
)
417421
},
418422
),
419-
]
423+
],
424+
parse_constraint("*"),
420425
)
421426
assert len(packages) == 1
422427
assert packages[a].groups == {"main"}
@@ -428,6 +433,43 @@ def test_merge_override_packages_extras(package: ProjectPackage) -> None:
428433
}
429434

430435

436+
@pytest.mark.parametrize(
437+
("python_constraint", "expected"),
438+
[
439+
(">=3.8", 'python_version > "3.8" or sys_platform != "linux"'),
440+
(">=3.9", ""),
441+
],
442+
)
443+
def test_merge_override_packages_python_constraint(
444+
package: ProjectPackage, python_constraint: str, expected: str
445+
) -> None:
446+
"""The resulting marker depends on the project's python constraint."""
447+
a = Package("a", "1")
448+
449+
packages = merge_override_packages(
450+
[
451+
(
452+
{
453+
package: {
454+
"a": dep(
455+
"b", "sys_platform == 'linux' and python_version > '3.8'"
456+
)
457+
}
458+
},
459+
{a: TransitivePackageInfo(0, {"main"}, {"main": AnyMarker()})},
460+
),
461+
(
462+
{package: {"a": dep("b", "sys_platform != 'linux'")}},
463+
{a: TransitivePackageInfo(0, {"main"}, {"main": AnyMarker()})},
464+
),
465+
],
466+
parse_constraint(python_constraint),
467+
)
468+
assert len(packages) == 1
469+
assert packages[a].groups == {"main"}
470+
assert tm(packages[a]) == {"main": expected}
471+
472+
431473
def test_merge_override_packages_multiple_deps(package: ProjectPackage) -> None:
432474
"""All override markers should be intersected."""
433475
a = Package("a", "1")
@@ -444,7 +486,8 @@ def test_merge_override_packages_multiple_deps(package: ProjectPackage) -> None:
444486
},
445487
{a: TransitivePackageInfo(0, {"main"}, {"main": AnyMarker()})},
446488
),
447-
]
489+
],
490+
parse_constraint("*"),
448491
)
449492

450493
assert len(packages) == 1
@@ -492,7 +535,8 @@ def test_merge_override_packages_groups(package: ProjectPackage) -> None:
492535
),
493536
},
494537
),
495-
]
538+
],
539+
parse_constraint("*"),
496540
)
497541
assert len(packages) == 2
498542
assert packages[a].groups == {"main", "dev"}
@@ -552,7 +596,8 @@ def test_merge_override_packages_shortcut(package: ProjectPackage) -> None:
552596
)
553597
},
554598
),
555-
]
599+
],
600+
parse_constraint("*"),
556601
)
557602
assert len(packages) == 1
558603
assert packages[a].groups == {"main"}

0 commit comments

Comments
 (0)