Skip to content

Commit 5269c23

Browse files
fix(tags): substitute ${devrelease} placeholder in tag_format
TagRules.normalize_tag only substituted `version`, `major`, `minor`, `patch` and `prerelease`. Users with `tag_format` referencing `` got the literal placeholder in their generated tag (e.g. `0.0-2`), which then broke subsequent bumps and changelog generation. Render `devrelease` as `dev<N>` when the version has a dev release, matching how dev releases appear in PEP-440 / SemVer version strings, and as the empty string otherwise -- mirroring the `prerelease` behaviour. Closes #1615 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4d99415 commit 5269c23

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

commitizen/tags.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ def normalize_tag(
212212

213213
major, minor, patch = (list(version.release) + [0, 0, 0])[:3]
214214
prerelease = version.prerelease or ""
215+
# `dev` is the integer dev-release number (e.g. 1 for "0.1.0.dev1")
216+
# or None if this version isn't a dev release. We render it as
217+
# `dev<N>` to match how dev releases appear in PEP-440 / SemVer
218+
# version strings.
219+
dev = getattr(version, "dev", None)
220+
devrelease = f"dev{dev}" if dev is not None else ""
215221

216222
t = Template(tag_format)
217223
return t.safe_substitute(
@@ -220,6 +226,7 @@ def normalize_tag(
220226
minor=minor,
221227
patch=patch,
222228
prerelease=prerelease,
229+
devrelease=devrelease,
223230
)
224231

225232
def find_tag_for(

tests/test_bump_normalize_tag.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
(("1.2.3+1.0.0", "v$version"), "v1.2.3+1.0.0"),
1313
(("1.2.3+1.0.0", "v$version-local"), "v1.2.3+1.0.0-local"),
1414
(("1.2.3+1.0.0", "ver$major.$minor.$patch"), "ver1.2.3"),
15+
# `${devrelease}` substitution (#1615): rendered as `dev<N>` when the
16+
# version has a dev release, and as the empty string otherwise.
17+
(("1.2.3.dev1", "v$major.$minor.$patch.$devrelease"), "v1.2.3.dev1"),
18+
(("1.2.3.dev0", "$major.$minor.$patch$devrelease"), "1.2.3dev0"),
19+
(("1.2.3", "$major.$minor.$patch$devrelease"), "1.2.3"),
1520
]
1621

1722

0 commit comments

Comments
 (0)