diff --git a/src/poetry/core/version/markers.py b/src/poetry/core/version/markers.py index 302a25f4f..a4afa4d76 100644 --- a/src/poetry/core/version/markers.py +++ b/src/poetry/core/version/markers.py @@ -284,6 +284,9 @@ def union(self, other: MarkerTypes) -> MarkerTypes: if self == other: return self + if self == other.invert(): + return AnyMarker() + return MarkerUnion.of(self, other) return other.union(self) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index f48b4559a..408501284 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -240,6 +240,12 @@ def test_single_marker_union_with_union_duplicate(): assert str(union) == 'sys_platform == "darwin" or python_version <= "3.6"' +def test_single_marker_union_with_inverse(): + m = parse_marker('sys_platform == "darwin"') + union = m.union(parse_marker('sys_platform != "darwin"')) + assert union.is_any() + + def test_multi_marker(): m = parse_marker('sys_platform == "darwin" and implementation_name == "cpython"')