diff --git a/commitizen/changelog.py b/commitizen/changelog.py index d8b8accca..aacfc3ab1 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -293,8 +293,10 @@ def incremental_build( return output_lines -def get_next_tag_name_after_version(tags: Iterable[GitTag], version: str) -> str | None: - it = iter(tag.name for tag in tags) +def get_next_tag_name_after_version( + tags: Iterable[GitTag], rules: TagRules, version: str +) -> str | None: + it = iter(tag.name for tag in tags if rules.include_in_changelog(tag)) for name in it: if name == version: return next(it, None) @@ -358,7 +360,7 @@ def get_tag_name(v: str) -> str: oldest_tag_name = get_tag_name(oldest_version) if oldest_version else None oldest_rev = get_next_tag_name_after_version( - tags, oldest_tag_name or newest_tag_name + tags, rules, oldest_tag_name or newest_tag_name ) # Return None for oldest_rev if: diff --git a/tests/test_changelog.py b/tests/test_changelog.py index ee0d97226..ea9b3c298 100644 --- a/tests/test_changelog.py +++ b/tests/test_changelog.py @@ -1530,23 +1530,33 @@ def test_get_smart_tag_range_returns_an_extra_for_a_single_tag(tags): assert 2 == len(res) -def test_get_next_tag_name_after_version(tags): +@pytest.mark.parametrize("merge_prereleases", [True, False]) +def test_get_next_tag_name_after_version(tags, merge_prereleases): # Test finding next tag after a version - next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.2.0") + rules = changelog.TagRules( + merge_prereleases=merge_prereleases, + ) + next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.2.0") assert next_tag_name == "v1.1.1" - next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.1.0") + next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.1.0") assert next_tag_name == "v1.0.0" + next_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v1.0.0") + if merge_prereleases: + assert next_tag_name == "v0.9.11" + else: + assert next_tag_name == "1.0.0b2" + # Test finding last tag when given version is last - last_tag_name = changelog.get_next_tag_name_after_version(tags, "v0.9.1") + last_tag_name = changelog.get_next_tag_name_after_version(tags, rules, "v0.9.1") assert last_tag_name is None # Test error when version not found with pytest.raises( changelog.NoCommitsFoundError, match="Could not find a valid revision range" ): - changelog.get_next_tag_name_after_version(tags, "nonexistent") + changelog.get_next_tag_name_after_version(tags, rules, "nonexistent") @dataclass