@@ -93,16 +93,34 @@ def tag_included_in_changelog(
9393 return True
9494
9595
96- def get_version_tags (scheme : type [BaseVersion ], tags : list [GitTag ]) -> list [GitTag ]:
96+ def get_version_tags (
97+ scheme : type [BaseVersion ], tags : list [GitTag ], tag_format : str
98+ ) -> list [GitTag ]:
9799 valid_tags : list [GitTag ] = []
100+ TAG_FORMAT_REGEXS = {
101+ "$version" : str (scheme .parser .pattern ),
102+ "$major" : r"(?P<major>\d+)" ,
103+ "$minor" : r"(?P<minor>\d+)" ,
104+ "$patch" : r"(?P<patch>\d+)" ,
105+ "$prerelease" : r"(?P<prerelease>\w+\d+)?" ,
106+ "$devrelease" : r"(?P<devrelease>\.dev\d+)?" ,
107+ "${version}" : str (scheme .parser .pattern ),
108+ "${major}" : r"(?P<major>\d+)" ,
109+ "${minor}" : r"(?P<minor>\d+)" ,
110+ "${patch}" : r"(?P<patch>\d+)" ,
111+ "${prerelease}" : r"(?P<prerelease>\w+\d+)?" ,
112+ "${devrelease}" : r"(?P<devrelease>\.dev\d+)?" ,
113+ }
114+ tag_format_regex = tag_format
115+ for pattern , regex in TAG_FORMAT_REGEXS .items ():
116+ tag_format_regex = tag_format_regex .replace (pattern , regex )
98117 for tag in tags :
99- try :
100- scheme (tag .name )
101- except InvalidVersion :
102- out .warn (f"InvalidVersion { tag } " )
103- else :
118+ if re .match (tag_format_regex , tag .name ):
104119 valid_tags .append (tag )
105-
120+ else :
121+ out .warn (
122+ f"InvalidVersion { tag .name } doesn't match configured tag format { tag_format } "
123+ )
106124 return valid_tags
107125
108126
@@ -351,7 +369,6 @@ def get_oldest_and_newest_rev(
351369 oldest , newest = version .split (".." )
352370 except ValueError :
353371 newest = version
354-
355372 newest_tag = normalize_tag (newest , tag_format = tag_format , scheme = scheme )
356373
357374 oldest_tag = None
0 commit comments