Skip to content
Open
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
2 changes: 1 addition & 1 deletion commitizen/version_schemes.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
Increment: TypeAlias = Literal["MAJOR", "MINOR", "PATCH"] # TODO: deprecate
Prerelease: TypeAlias = Literal["alpha", "beta", "rc"]
_DEFAULT_VERSION_PARSER = re.compile(
r"v?(?P<version>([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.]+)?(\w+)?)"
r"v?(?P<version>([0-9]+)\.([0-9]+)(?:\.([0-9]+))?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\w+)?(?:\.dev\d+)?(?:\+[0-9A-Za-z.]+)?)"
)


Expand Down
49 changes: 49 additions & 0 deletions tests/commands/test_bump_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,55 @@ def test_bump_command_prerelease(util: UtilFixture):
assert git.tag_exist("0.2.0") is True


def test_bump_devrelease_with_incremental_changelog(
tmp_commitizen_project: Path, util: UtilFixture, changelog_path: Path
):
config_path = tmp_commitizen_project / "pyproject.toml"
config_path.write_text(
dedent(
"""\
[project]
name = "dev-project"
version = "0.1.0"

[tool.commitizen]
version_provider = "uv"
update_changelog_on_bump = true
changelog_incremental = true
"""
),
encoding="utf-8",
)
lock_path = tmp_commitizen_project / "uv.lock"
lock_path.write_text(
dedent(
"""\
version = 1
revision = 1

[[package]]
name = "dev-project"
version = "0.1.0"
source = { virtual = "." }
"""
),
encoding="utf-8",
)

util.create_file_and_commit("feat: first development release")
util.run_cli("bump", "--devrelease", "0", "--yes")
assert git.tag_exist("0.2.0.dev0") is True

util.create_file_and_commit("feat: next development release")
util.run_cli("bump", "--devrelease", "1", "--yes")
assert git.tag_exist("0.2.0.dev1") is True
changelog = changelog_path.read_text(encoding="utf-8")
assert "0.2.0.dev1" in changelog
assert "next development release" in changelog
assert 'version = "0.2.0.dev1"' in config_path.read_text(encoding="utf-8")
assert 'version = "0.2.0.dev1"' in lock_path.read_text(encoding="utf-8")


@pytest.mark.usefixtures("tmp_commitizen_project")
def test_bump_command_prerelease_increment(util: UtilFixture):
# FINAL RELEASE
Expand Down
22 changes: 22 additions & 0 deletions tests/test_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,25 @@ def test_is_version_tag_accepts_dotless_devrelease_in_custom_tag_format():

extracted = rules.extract_version(_git_tag("version-1.2.3dev1"))
assert str(extracted) == "1.2.3.dev1"


def test_is_version_tag_accepts_pep440_devrelease():
rules = TagRules()

versions = [
("0.2.0.dev0", "0.2.0.dev0"),
("0.2.0dev0", "0.2.0.dev0"),
("0.2.0.dev0+build.1", "0.2.0.dev0+build.1"),
("0.2.0a1.dev0", "0.2.0a1.dev0"),
("0.2.0a1.dev0+build.1", "0.2.0a1.dev0+build.1"),
]
for tag, expected in versions:
assert rules.is_version_tag(tag) is True
assert str(rules.extract_version(_git_tag(tag))) == expected

assert rules.is_version_tag("0.2.0.not-a-release") is False

custom_rules = TagRules(tag_format="release-$version-final")
custom_tag = _git_tag("release-0.2.0.dev0-final")
assert custom_rules.is_version_tag(custom_tag) is True
assert str(custom_rules.extract_version(custom_tag)) == "0.2.0.dev0"
Loading