diff --git a/src/poetry/core/version/pep440/version.py b/src/poetry/core/version/pep440/version.py index c1252a6f4..ab71c9e66 100644 --- a/src/poetry/core/version/pep440/version.py +++ b/src/poetry/core/version/pep440/version.py @@ -205,7 +205,7 @@ def next_major(self: T) -> T: release = self.release if self.is_stable() or Release(self.release.major, 0, 0) < self.release: release = self.release.next_major() - return self.__class__(epoch=self.epoch, release=release) + return self.__class__(epoch=self.epoch, release=release, local=self.local) def next_minor(self: T) -> T: release = self.release @@ -214,12 +214,13 @@ def next_minor(self: T) -> T: or Release(self.release.major, self.release.minor, 0) < self.release ): release = self.release.next_minor() - return self.__class__(epoch=self.epoch, release=release) + return self.__class__(epoch=self.epoch, release=release, local=self.local) def next_patch(self: T) -> T: return self.__class__( epoch=self.epoch, release=self.release.next_patch() if self.is_stable() else self.release, + local=self.local, ) def next_prerelease(self: T, next_phase: bool = False) -> PEP440Version: @@ -228,7 +229,9 @@ def next_prerelease(self: T, next_phase: bool = False) -> PEP440Version: pre = self.pre.next_phase() if next_phase else self.pre.next() else: pre = ReleaseTag(RELEASE_PHASE_ID_ALPHA) - return self.__class__(epoch=self.epoch, release=self.release, pre=pre) + return self.__class__( + epoch=self.epoch, release=self.release, pre=pre, local=self.local + ) def next_postrelease(self: T) -> T: if self.is_postrelease(): @@ -242,6 +245,7 @@ def next_postrelease(self: T) -> T: pre=self.pre, dev=self.dev, post=post, + local=self.local, ) def next_devrelease(self: T) -> T: @@ -256,6 +260,7 @@ def next_devrelease(self: T) -> T: pre=self.pre, post=self.post, dev=dev, + local=self.local, ) def first_prerelease(self: T) -> T: @@ -263,6 +268,7 @@ def first_prerelease(self: T) -> T: epoch=self.epoch, release=self.release, pre=ReleaseTag(RELEASE_PHASE_ID_ALPHA), + local=self.local, ) def replace(self: T, **kwargs: Any) -> T: diff --git a/tests/semver/test_parse_constraint.py b/tests/semver/test_parse_constraint.py index ae6f2d3a1..9e8bbaf2d 100644 --- a/tests/semver/test_parse_constraint.py +++ b/tests/semver/test_parse_constraint.py @@ -246,6 +246,45 @@ include_min=True, ), ), + ( + "^1.10+cu113", + VersionRange( + min=Version.from_parts(1, 10, local="cu113"), + max=Version.from_parts(2, 0, local="cu113"), + include_min=True, + ), + ), + ( + "~1.10.0+cu113", + VersionRange( + min=Version.from_parts(1, 10, 0, local="cu113"), + max=Version.from_parts(1, 11, 0, local="cu113"), + include_min=True, + ), + ), + ( + ">=1.10.0+cu113", + VersionRange( + min=Version.from_parts(1, 10, 0, local="cu113"), + include_min=True, + ), + ), + ( + ">=1.10.0+cu113,<2.0", + VersionRange( + min=Version.from_parts(1, 10, 0, local="cu113"), + max=Version.from_parts(2, 0), + include_min=True, + ), + ), + ( + ">=1.10.0+cu113,<2.0+cu113", + VersionRange( + min=Version.from_parts(1, 10, 0, local="cu113"), + max=Version.from_parts(2, 0, local="cu113"), + include_min=True, + ), + ), ], ) @pytest.mark.parametrize(("with_whitespace_padding",), [(True,), (False,)])