@@ -281,6 +281,18 @@ def incremental_build(
281281 return output_lines
282282
283283
284+ def get_next_tag_name_after_version (tags : Sequence [GitTag ], version : str ) -> str | None :
285+ idx = len (tags ) - 1
286+ while idx >= 0 :
287+ if tags [idx ].name == version :
288+ if idx == len (tags ) - 1 :
289+ return None
290+ return tags [idx + 1 ].name
291+ idx -= 1
292+ raise NoCommitsFoundError (f"Could not find a valid revision range. { version = } " )
293+
294+
295+ # TODO: unused, deprecate this?
284296def get_smart_tag_range (
285297 tags : Sequence [GitTag ], newest : str , oldest : str | None = None
286298) -> list [GitTag ]:
@@ -331,15 +343,13 @@ def get_tag_name(v: str) -> str:
331343 newest_tag_name = get_tag_name (newest_version )
332344 oldest_tag_name = get_tag_name (oldest_version ) if oldest_version else None
333345
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
346+ oldest_rev = get_next_tag_name_after_version (
347+ tags , oldest_tag_name or newest_tag_name
348+ )
339349
340350 # Return None for oldest_rev if:
341351 # 1. The oldest tag is the last tag in the list and matches the requested oldest tag
342352 # 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
353+ if oldest_rev == newest_tag_name :
354+ return None , newest_tag_name
345355 return oldest_rev , newest_tag_name
0 commit comments