3232from collections .abc import Generator , Iterable , Mapping , Sequence
3333from dataclasses import dataclass
3434from datetime import date
35+ from itertools import chain , tee
3536from typing import TYPE_CHECKING , Any
3637
3738from jinja2 import (
@@ -281,6 +282,16 @@ def incremental_build(
281282 return output_lines
282283
283284
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?
284295def get_smart_tag_range (
285296 tags : Sequence [GitTag ], newest : str , oldest : str | None = None
286297) -> list [GitTag ]:
@@ -308,7 +319,7 @@ def get_smart_tag_range(
308319
309320
310321def get_oldest_and_newest_rev (
311- tags : Sequence [GitTag ],
322+ tags : Iterable [GitTag ],
312323 version : str ,
313324 rules : TagRules ,
314325) -> tuple [str | None , str ]:
@@ -331,15 +342,13 @@ def get_tag_name(v: str) -> str:
331342 newest_tag_name = get_tag_name (newest_version )
332343 oldest_tag_name = get_tag_name (oldest_version ) if oldest_version else None
333344
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+ )
339348
340349 # Return None for oldest_rev if:
341350 # 1. The oldest tag is the last tag in the list and matches the requested oldest tag
342351 # 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
345354 return oldest_rev , newest_tag_name
0 commit comments