Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/pr486.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix :meth:`~semver.Version.next_version` to drop the build metadata when incrementing an old-style prerelease without a dot separator (for example ``rc3``). Previously ``1.2.3-rc3+build.5`` became ``1.2.3-rc4+build.5`` while ``1.2.3-rc.3+build.5`` became ``1.2.3-rc.4``.
4 changes: 3 additions & 1 deletion src/semver/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,9 @@ def next_version(self, part: str, prerelease_token: str = "rc") -> "Version":
match = re.match(f"^{prerelease_token}(\\d+)$", version.prerelease)
if match:
num = int(match.group(1))
return version.replace(prerelease=f"{prerelease_token}{num + 1}")
return version.replace(
prerelease=f"{prerelease_token}{num + 1}", build=None
)

current_token = version.prerelease.split(".")[0]
if current_token != prerelease_token:
Expand Down
6 changes: 6 additions & 0 deletions tests/test_issue484.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,9 @@ def test_issue_484_custom_token():
"""Custom prerelease token should be respected."""
v = Version.parse("1.2.3-beta2")
assert str(v.next_version("prerelease", "beta")) == "1.2.3-beta3"


def test_issue_484_old_style_drops_build():
"""Build metadata is dropped, as it is for dot-separated prereleases."""
v = Version.parse("1.2.3-rc3+build.5")
assert v.next_version("prerelease").build is None
1 change: 1 addition & 0 deletions tests/test_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ def test_next_version_with_invalid_parts():
# prerelease+build: build is stripped along with prerelease during finalization
("1.2.3-rc.1+build.5", "patch", "1.2.3"),
("1.2.3-rc.1+build.5", "prerelease", "1.2.3-rc.2"),
("1.2.3-rc1+build.5", "prerelease", "1.2.3-rc2"),
],
)
def test_next_version_with_versioninfo(version, part, expected):
Expand Down
Loading