From 8c7caa1f7898b30ede9cf7daad7886d9843db4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:38:27 +0200 Subject: [PATCH] version: fix allows for local and post releases according to PEP 440 --- src/poetry/core/semver/version.py | 6 ------ tests/semver/test_version.py | 20 +++++++++++++++----- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/poetry/core/semver/version.py b/src/poetry/core/semver/version.py index 356ac9e09..0529bbb3b 100644 --- a/src/poetry/core/semver/version.py +++ b/src/poetry/core/semver/version.py @@ -86,12 +86,6 @@ def allows(self, version: Version | None) -> bool: # allow weak equality to allow `3.0.0+local.1` for `3.0.0` if not _this.is_local() and _other.is_local(): _other = _other.without_local() - elif _this.is_local() and not _other.is_local(): - _this = _this.without_local() - - # allow weak equality to allow `3.0.0-1` for `3.0.0` - if not _this.is_postrelease() and _other.is_postrelease(): - _other = _other.without_postrelease() return _this == _other diff --git a/tests/semver/test_version.py b/tests/semver/test_version.py index 54fcf004d..812949798 100644 --- a/tests/semver/test_version.py +++ b/tests/semver/test_version.py @@ -122,25 +122,30 @@ def test_allows() -> None: assert not v.allows(Version.parse("1.3.3")) assert not v.allows(Version.parse("1.2.4")) assert not v.allows(Version.parse("1.2.3-dev")) + assert not v.allows(Version.parse("1.2.3-1")) + assert not v.allows(Version.parse("1.2.3-1+build")) assert v.allows(Version.parse("1.2.3+build")) - assert v.allows(Version.parse("1.2.3-1")) - assert v.allows(Version.parse("1.2.3-1+build")) def test_allows_with_local() -> None: v = Version.parse("1.2.3+build.1") assert v.allows(v) + assert not v.allows(Version.parse("1.2.3")) assert not v.allows(Version.parse("1.3.3")) assert not v.allows(Version.parse("1.2.3-dev")) assert not v.allows(Version.parse("1.2.3+build.2")) - assert v.allows(Version.parse("1.2.3-1")) - assert v.allows(Version.parse("1.2.3-1+build.1")) + # local version with a great number of segments will always compare as + # greater than a local version with fewer segments + assert not v.allows(Version.parse("1.2.3+build.1.0")) + assert not v.allows(Version.parse("1.2.3-1")) + assert not v.allows(Version.parse("1.2.3-1+build.1")) def test_allows_with_post() -> None: v = Version.parse("1.2.3-1") assert v.allows(v) assert not v.allows(Version.parse("1.2.3")) + assert not v.allows(Version.parse("1.2.3-2")) assert not v.allows(Version.parse("2.2.3")) assert not v.allows(Version.parse("1.2.3-dev")) assert not v.allows(Version.parse("1.2.3+build.2")) @@ -190,7 +195,12 @@ def test_allows_any() -> None: ( Version.parse("1.2.3"), Version.parse("1.2.3.post0"), - Version.parse("1.2.3.post0"), + EmptyConstraint(), + ), + ( + Version.parse("1.2.3"), + Version.parse("1.2.3+local"), + Version.parse("1.2.3+local"), ), ], )