From 51d66ce15baf65549b9975b1aa6946df4520bdc3 Mon Sep 17 00:00:00 2001 From: Jongbin Park Date: Thu, 2 Jan 2020 17:00:13 +0900 Subject: [PATCH 1/2] Fix PEP440 compatible release (`~=`) handling PEP440 compatible release version range (`~=`) should have itself as a minimum value. Examples from [official doc](https://python.org/dev/peps/pep-0440/#compatible-release) (each pair is equivalent): ``` ~=2.2 >=2.2, ==2.* ~=1.4.5 >=1.4.5, ==1.4.* ~=2.2.post3 >=2.2.post3, ==2.* ~=1.4.5a4 >=1.4.5a4, ==1.4.* ``` In every case, lower bound is exactly same as the input version. Current incorrect behavior was originally introduced 2 years ago by commit c55d55a8, where it tried to reset patch version to 0 for tilde expression. Closes #1150. --- poetry/semver/__init__.py | 4 +--- tests/semver/test_main.py | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/poetry/semver/__init__.py b/poetry/semver/__init__.py index 58ca3a1edc3..725b7d43f58 100644 --- a/poetry/semver/__init__.py +++ b/poetry/semver/__init__.py @@ -76,14 +76,12 @@ def parse_single_constraint(constraint): # type: (str) -> VersionConstraint version = Version.parse(m.group(1)) if precision == 2: - low = version high = version.stable.next_major else: - low = Version(version.major, version.minor, version.patch) high = version.stable.next_minor return VersionRange( - low, high, include_min=True, always_include_max_prerelease=True + version, high, include_min=True, always_include_max_prerelease=True ) # Caret range diff --git a/tests/semver/test_main.py b/tests/semver/test_main.py index 654a54a5281..86a0d1d7fbd 100644 --- a/tests/semver/test_main.py +++ b/tests/semver/test_main.py @@ -68,6 +68,7 @@ def test_parse_constraint_wildcard(input, constraint): ("~3.5", VersionRange(Version(3, 5, 0), Version(3, 6, 0), True)), ("~=3.5", VersionRange(Version(3, 5, 0), Version(4, 0, 0), True)), # PEP 440 ("~=3.5.3", VersionRange(Version(3, 5, 3), Version(3, 6, 0), True)), # PEP 440 + ("~=3.5.3rc1", VersionRange(Version(3, 5, 3, pre='rc1'), Version(3, 6, 0), True)), # PEP 440 ], ) def test_parse_constraint_tilde(input, constraint): From c5c9d4feaba9a508ab53df4d29c93291c780ad9b Mon Sep 17 00:00:00 2001 From: Jongbin Park Date: Thu, 2 Jan 2020 17:33:33 +0900 Subject: [PATCH 2/2] Fix Black lint --- tests/semver/test_main.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/semver/test_main.py b/tests/semver/test_main.py index 86a0d1d7fbd..4610e8d4573 100644 --- a/tests/semver/test_main.py +++ b/tests/semver/test_main.py @@ -68,7 +68,10 @@ def test_parse_constraint_wildcard(input, constraint): ("~3.5", VersionRange(Version(3, 5, 0), Version(3, 6, 0), True)), ("~=3.5", VersionRange(Version(3, 5, 0), Version(4, 0, 0), True)), # PEP 440 ("~=3.5.3", VersionRange(Version(3, 5, 3), Version(3, 6, 0), True)), # PEP 440 - ("~=3.5.3rc1", VersionRange(Version(3, 5, 3, pre='rc1'), Version(3, 6, 0), True)), # PEP 440 + ( + "~=3.5.3rc1", + VersionRange(Version(3, 5, 3, pre="rc1"), Version(3, 6, 0), True), + ), # PEP 440 ], ) def test_parse_constraint_tilde(input, constraint):