Skip to content

Commit 277d8f9

Browse files
committed
refactor(changelog): add get_next_tag_name_after_version and test, mark unused for get_smart_tag_range
1 parent 4ec5213 commit 277d8f9

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

commitizen/changelog.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,16 @@ def incremental_build(
281281
return output_lines
282282

283283

284+
def get_next_tag_name_after_version(tags: Iterable[GitTag], version: str) -> str | None:
285+
it = iter(tag.name for tag in tags)
286+
for name in it:
287+
if name == version:
288+
return next(it, None)
289+
290+
raise NoCommitsFoundError(f"Could not find a valid revision range. {version=}")
291+
292+
293+
# TODO: unused, deprecate this?
284294
def get_smart_tag_range(
285295
tags: Sequence[GitTag], newest: str, oldest: str | None = None
286296
) -> list[GitTag]:
@@ -308,7 +318,7 @@ def get_smart_tag_range(
308318

309319

310320
def get_oldest_and_newest_rev(
311-
tags: Sequence[GitTag],
321+
tags: Iterable[GitTag],
312322
version: str,
313323
rules: TagRules,
314324
) -> tuple[str | None, str]:
@@ -331,15 +341,13 @@ def get_tag_name(v: str) -> str:
331341
newest_tag_name = get_tag_name(newest_version)
332342
oldest_tag_name = get_tag_name(oldest_version) if oldest_version else None
333343

334-
tags_range = get_smart_tag_range(tags, newest_tag_name, oldest_tag_name)
335-
if not tags_range:
336-
raise NoCommitsFoundError("Could not find a valid revision range.")
337-
338-
oldest_rev: str | None = tags_range[-1].name
344+
oldest_rev = get_next_tag_name_after_version(
345+
tags, oldest_tag_name or newest_tag_name
346+
)
339347

340348
# Return None for oldest_rev if:
341349
# 1. The oldest tag is the last tag in the list and matches the requested oldest tag
342350
# 2. The oldest and the newest tag are the same
343-
if oldest_rev == oldest_tag_name == tags[-1].name or oldest_rev == newest_tag_name:
344-
oldest_rev = None
351+
if oldest_rev == newest_tag_name:
352+
return None, newest_tag_name
345353
return oldest_rev, newest_tag_name

tests/test_changelog.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,6 +1535,24 @@ def test_get_smart_tag_range_returns_an_extra_for_a_single_tag(tags):
15351535
assert 2 == len(res)
15361536

15371537

1538+
def test_get_next_tag_name_after_version(tags):
1539+
# Test finding next tag after a version
1540+
next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.2.0")
1541+
assert next_tag_name == "v1.1.1"
1542+
1543+
next_tag_name = changelog.get_next_tag_name_after_version(tags, "v1.1.0")
1544+
assert next_tag_name == "v1.0.0"
1545+
1546+
# Test finding last tag when given version is last
1547+
last_tag_name = changelog.get_next_tag_name_after_version(tags, "v0.9.1")
1548+
assert last_tag_name is None
1549+
1550+
# Test error when version not found
1551+
with pytest.raises(changelog.NoCommitsFoundError) as exc_info:
1552+
changelog.get_next_tag_name_after_version(tags, "nonexistent")
1553+
assert "Could not find a valid revision range" in str(exc_info.value)
1554+
1555+
15381556
@dataclass
15391557
class TagDef:
15401558
name: str

0 commit comments

Comments
 (0)