@@ -276,6 +276,16 @@ def incremental_build(
276276 return output_lines
277277
278278
279+ def get_next_tag_name_after_version (tags : Iterable [GitTag ], version : str ) -> str | None :
280+ it = iter (tag .name for tag in tags )
281+ for name in it :
282+ if name == version :
283+ return next (it , None )
284+
285+ raise NoCommitsFoundError (f"Could not find a valid revision range. { version = } " )
286+
287+
288+ # TODO: unused, deprecate this?
279289def get_smart_tag_range (
280290 tags : Sequence [GitTag ], newest : str , oldest : str | None = None
281291) -> list [GitTag ]:
@@ -303,7 +313,7 @@ def get_smart_tag_range(
303313
304314
305315def get_oldest_and_newest_rev (
306- tags : Sequence [GitTag ],
316+ tags : Iterable [GitTag ],
307317 version : str ,
308318 rules : TagRules ,
309319) -> tuple [str | None , str ]:
@@ -326,15 +336,13 @@ def get_tag_name(v: str) -> str:
326336 newest_tag_name = get_tag_name (newest_version )
327337 oldest_tag_name = get_tag_name (oldest_version ) if oldest_version else None
328338
329- tags_range = get_smart_tag_range (tags , newest_tag_name , oldest_tag_name )
330- if not tags_range :
331- raise NoCommitsFoundError ("Could not find a valid revision range." )
332-
333- oldest_rev : str | None = tags_range [- 1 ].name
339+ oldest_rev = get_next_tag_name_after_version (
340+ tags , oldest_tag_name or newest_tag_name
341+ )
334342
335343 # Return None for oldest_rev if:
336344 # 1. The oldest tag is the last tag in the list and matches the requested oldest tag
337345 # 2. The oldest and the newest tag are the same
338- if oldest_rev == oldest_tag_name == tags [ - 1 ]. name or oldest_rev == newest_tag_name :
339- oldest_rev = None
346+ if oldest_rev == newest_tag_name :
347+ return None , newest_tag_name
340348 return oldest_rev , newest_tag_name
0 commit comments