|
32 | 32 | from collections.abc import Generator, Iterable, Mapping, Sequence
|
33 | 33 | from dataclasses import dataclass
|
34 | 34 | from datetime import date
|
| 35 | +from itertools import chain, tee |
35 | 36 | from typing import TYPE_CHECKING, Any
|
36 | 37 |
|
37 | 38 | from jinja2 import (
|
@@ -281,6 +282,16 @@ def incremental_build(
|
281 | 282 | return output_lines
|
282 | 283 |
|
283 | 284 |
|
| 285 | +def get_next_tag_name_after_version(tags: Iterable[GitTag], version: str) -> str | None: |
| 286 | + a, b = tee(chain((tag.name for tag in tags), [None])) |
| 287 | + next(b, None) |
| 288 | + try: |
| 289 | + return next(y for x, y in zip(a, b) if x == version) |
| 290 | + except StopIteration: |
| 291 | + raise NoCommitsFoundError(f"Could not find a valid revision range. {version=}") |
| 292 | + |
| 293 | + |
| 294 | +# TODO: unused, deprecate this? |
284 | 295 | def get_smart_tag_range(
|
285 | 296 | tags: Sequence[GitTag], newest: str, oldest: str | None = None
|
286 | 297 | ) -> list[GitTag]:
|
@@ -331,15 +342,13 @@ def get_tag_name(v: str) -> str:
|
331 | 342 | newest_tag_name = get_tag_name(newest_version)
|
332 | 343 | oldest_tag_name = get_tag_name(oldest_version) if oldest_version else None
|
333 | 344 |
|
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 |
| 345 | + oldest_rev = get_next_tag_name_after_version( |
| 346 | + tags, oldest_tag_name or newest_tag_name |
| 347 | + ) |
339 | 348 |
|
340 | 349 | # Return None for oldest_rev if:
|
341 | 350 | # 1. The oldest tag is the last tag in the list and matches the requested oldest tag
|
342 | 351 | # 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 |
| 352 | + if oldest_rev == newest_tag_name: |
| 353 | + return None, newest_tag_name |
345 | 354 | return oldest_rev, newest_tag_name
|
0 commit comments