Skip to content

Commit 49d4613

Browse files
author
Emmanuel Garette
committed
fix(changelog): the merge_prerelease option should work with the changelog command
In the Commitizen configuration, you can set the `changelog_merge_prerelease` option to `true`. When this is enabled, commit messages from prerelease versions are included the last stable version in the changelog. They should also be included when running `cz changelog <version>`.
1 parent 33c248e commit 49d4613

2 files changed

Lines changed: 20 additions & 8 deletions

File tree

‎commitizen/changelog.py‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,10 @@ def incremental_build(
293293
return output_lines
294294

295295

296-
def get_next_tag_name_after_version(tags: Iterable[GitTag], version: str) -> str | None:
297-
it = iter(tag.name for tag in tags)
296+
def get_next_tag_name_after_version(
297+
tags: Iterable[GitTag], rules: TagRules, version: str
298+
) -> str | None:
299+
it = iter(tag.name for tag in tags if rules.include_in_changelog(tag))
298300
for name in it:
299301
if name == version:
300302
return next(it, None)
@@ -358,7 +360,7 @@ def get_tag_name(v: str) -> str:
358360
oldest_tag_name = get_tag_name(oldest_version) if oldest_version else None
359361

360362
oldest_rev = get_next_tag_name_after_version(
361-
tags, oldest_tag_name or newest_tag_name
363+
tags, rules, oldest_tag_name or newest_tag_name
362364
)
363365

364366
# Return None for oldest_rev if:

‎tests/test_changelog.py‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,23 +1530,33 @@ def test_get_smart_tag_range_returns_an_extra_for_a_single_tag(tags):
15301530
assert 2 == len(res)
15311531

15321532

1533-
def test_get_next_tag_name_after_version(tags):
1533+
@pytest.mark.parametrize("merge_prereleases", [True, False])
1534+
def test_get_next_tag_name_after_version(tags, merge_prereleases):
15341535
# Test finding next tag after a version
1535-
next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.2.0")
1536+
rules = changelog.TagRules(
1537+
merge_prereleases=merge_prereleases,
1538+
)
1539+
next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.2.0")
15361540
assert next_tag_name == "v1.1.1"
15371541

1538-
next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.1.0")
1542+
next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.1.0")
15391543
assert next_tag_name == "v1.0.0"
15401544

1545+
next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.0.0")
1546+
if merge_prereleases:
1547+
assert next_tag_name == "v0.9.11"
1548+
else:
1549+
assert next_tag_name == "1.0.0b2"
1550+
15411551
# Test finding last tag when given version is last
1542-
last_tag_name = changelog.get_next_tag_name_after_version(tags, "v0.9.1")
1552+
last_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v0.9.1")
15431553
assert last_tag_name is None
15441554

15451555
# Test error when version not found
15461556
with pytest.raises(
15471557
changelog.NoCommitsFoundError, match="Could not find a valid revision range"
15481558
):
1549-
changelog.get_next_tag_name_after_version(tags, "nonexistent")
1559+
changelog.get_next_tag_name_after_version(tags, rules, "nonexistent")
15501560

15511561

15521562
@dataclass

0 commit comments

Comments
 (0)