@@ -91,16 +91,34 @@ def tag_included_in_changelog(
9191 return True
9292
9393
94- def get_version_tags (scheme : type [BaseVersion ], tags : list [GitTag ]) -> list [GitTag ]:
94+ def get_version_tags (
95+ scheme : type [BaseVersion ], tags : list [GitTag ], tag_format : str
96+ ) -> list [GitTag ]:
9597 valid_tags : list [GitTag ] = []
98+ TAG_FORMAT_REGEXS = {
99+ "$version" : str (scheme .parser .pattern ),
100+ "$major" : r"(?P<major>\d+)" ,
101+ "$minor" : r"(?P<minor>\d+)" ,
102+ "$patch" : r"(?P<patch>\d+)" ,
103+ "$prerelease" : r"(?P<prerelease>\w+\d+)?" ,
104+ "$devrelease" : r"(?P<devrelease>\.dev\d+)?" ,
105+ "${version}" : str (scheme .parser .pattern ),
106+ "${major}" : r"(?P<major>\d+)" ,
107+ "${minor}" : r"(?P<minor>\d+)" ,
108+ "${patch}" : r"(?P<patch>\d+)" ,
109+ "${prerelease}" : r"(?P<prerelease>\w+\d+)?" ,
110+ "${devrelease}" : r"(?P<devrelease>\.dev\d+)?" ,
111+ }
112+ tag_format_regex = tag_format
113+ for pattern , regex in TAG_FORMAT_REGEXS .items ():
114+ tag_format_regex = tag_format_regex .replace (pattern , regex )
96115 for tag in tags :
97- try :
98- scheme (tag .name )
99- except InvalidVersion :
100- out .warn (f"InvalidVersion { tag } " )
101- else :
116+ if re .match (tag_format_regex , tag .name ):
102117 valid_tags .append (tag )
103-
118+ else :
119+ out .warn (
120+ f"InvalidVersion { tag .name } doesn't match configured tag format { tag_format } "
121+ )
104122 return valid_tags
105123
106124
@@ -319,7 +337,6 @@ def get_oldest_and_newest_rev(
319337 oldest , newest = version .split (".." )
320338 except ValueError :
321339 newest = version
322-
323340 newest_tag = normalize_tag (newest , tag_format = tag_format , scheme = scheme )
324341
325342 oldest_tag = None
0 commit comments