From cb072dd4e5dd6eb502c30c9602cb1bff51453bf4 Mon Sep 17 00:00:00 2001 From: Anton Petnitsky <168552591+Mukller@users.noreply.github.com> Date: Wed, 29 Jul 2026 16:46:29 +0300 Subject: [PATCH 1/2] fix(next_version): reset prerelease when token changes (#339) 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". --- src/semver/version.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/semver/version.py b/src/semver/version.py index 5592e92..8c6eca8 100644 --- a/src/semver/version.py +++ b/src/semver/version.py @@ -482,6 +482,10 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version": if part in cls.NAMES[:3]: return getattr(version, "bump_" + part)() else: + if version.prerelease is not None and prerelease_token: + current_token = version.prerelease.split(".")[0] + if current_token != prerelease_token: + return version.replace(prerelease=f"{prerelease_token}.1", build=None) return version.bump_prerelease(prerelease_token, bump_when_empty=True) @_comparator From 3d4421326bcd2511c9773d4ebbefe4a9a5c5f521 Mon Sep 17 00:00:00 2001 From: Tom Schraitle Date: Thu, 30 Jul 2026 09:27:12 +0200 Subject: [PATCH 2/2] Fix doctest --- docs/usage/increase-parts-of-a-version_prereleases.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/increase-parts-of-a-version_prereleases.rst b/docs/usage/increase-parts-of-a-version_prereleases.rst index c2088c5..8b1b98b 100644 --- a/docs/usage/increase-parts-of-a-version_prereleases.rst +++ b/docs/usage/increase-parts-of-a-version_prereleases.rst @@ -15,7 +15,7 @@ would perhaps a better fit. >>> v = Version.parse("3.4.5-pre.2+build.4") >>> str(v.next_version(part="prerelease")) - '3.4.5-pre.3' + '3.4.5-rc.1' >>> str(Version.parse("3.4.5-pre.2+build.4").next_version(part="patch")) '3.4.5' >>> str(Version.parse("3.4.5+build.4").next_version(part="patch"))