diff --git a/commitizen/tags.py b/commitizen/tags.py index b3bcbe7a0..c8ea678c1 100644 --- a/commitizen/tags.py +++ b/commitizen/tags.py @@ -212,6 +212,12 @@ def normalize_tag( major, minor, patch = (list(version.release) + [0, 0, 0])[:3] prerelease = version.prerelease or "" + # `dev` is the integer dev-release number (e.g. 1 for "0.1.0.dev1") + # or None if this version isn't a dev release. We render it as + # `dev` to match how dev releases appear in PEP-440 / SemVer + # version strings. + dev = getattr(version, "dev", None) + devrelease = f"dev{dev}" if dev is not None else "" t = Template(tag_format) return t.safe_substitute( @@ -220,6 +226,7 @@ def normalize_tag( minor=minor, patch=patch, prerelease=prerelease, + devrelease=devrelease, ) def find_tag_for( diff --git a/tests/test_bump_normalize_tag.py b/tests/test_bump_normalize_tag.py index 558550c5a..e4d5fa393 100644 --- a/tests/test_bump_normalize_tag.py +++ b/tests/test_bump_normalize_tag.py @@ -12,6 +12,11 @@ (("1.2.3+1.0.0", "v$version"), "v1.2.3+1.0.0"), (("1.2.3+1.0.0", "v$version-local"), "v1.2.3+1.0.0-local"), (("1.2.3+1.0.0", "ver$major.$minor.$patch"), "ver1.2.3"), + # `${devrelease}` substitution (#1615): rendered as `dev` when the + # version has a dev release, and as the empty string otherwise. + (("1.2.3.dev1", "v$major.$minor.$patch.$devrelease"), "v1.2.3.dev1"), + (("1.2.3.dev0", "$major.$minor.$patch$devrelease"), "1.2.3dev0"), + (("1.2.3", "$major.$minor.$patch$devrelease"), "1.2.3"), ]