Visitar URL original
fix(next_version): reset prerelease when token changes (#339) (#472) · python-semver/python-semver@fdec4ae · GitHub
Skip to content

Commit fdec4ae

Browse files
authored
fix(next_version): reset prerelease when token changes (#339) (#472)
When next_version("prerelease", prerelease_token="rc") is called on a version that already has a prerelease with a different token (e.g. dev), bump_prerelease() ignores the token argument and simply increments the existing counter. 1.2.4-dev.1 becomes 1.2.4-dev.2 instead of 1.2.4-rc.1. Fix: before delegating to bump_prerelease, check whether the existing prerelease token matches the requested one. When they differ, replace the prerelease directly with "{prerelease_token}.1".
1 parent 4e09ef0 commit fdec4ae

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

‎docs/usage/increase-parts-of-a-version_prereleases.rst‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ would perhaps a better fit.
1515
1616
>>> v = Version.parse("3.4.5-pre.2+build.4")
1717
>>> str(v.next_version(part="prerelease"))
18-
'3.4.5-pre.3'
18+
'3.4.5-rc.1'
1919
>>> str(Version.parse("3.4.5-pre.2+build.4").next_version(part="patch"))
2020
'3.4.5'
2121
>>> str(Version.parse("3.4.5+build.4").next_version(part="patch"))

‎src/semver/version.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,10 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version":
482482
if part in cls.NAMES[:3]:
483483
return getattr(version, "bump_" + part)()
484484
else:
485+
if version.prerelease is not None and prerelease_token:
486+
current_token = version.prerelease.split(".")[0]
487+
if current_token != prerelease_token:
488+
return version.replace(prerelease=f"{prerelease_token}.1", build=None)
485489
return version.bump_prerelease(prerelease_token, bump_when_empty=True)
486490

487491
@_comparator

0 commit comments

Comments
 (0)