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 ]:
@@ -308,7 +319,7 @@ def get_smart_tag_range(
308
319
309
320
310
321
def get_oldest_and_newest_rev (
311
- tags : Sequence [GitTag ],
322
+ tags : Iterable [GitTag ],
312
323
version : str ,
313
324
rules : TagRules ,
314
325
) -> tuple [str | None , str ]:
@@ -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