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
8 changes: 5 additions & 3 deletions commitizen/changelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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:
Expand Down
20 changes: 15 additions & 5 deletions tests/test_changelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading