@@ -93,16 +93,34 @@ def tag_included_in_changelog(
93
93
return True
94
94
95
95
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 ]:
97
99
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 )
98
117
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 ):
104
119
valid_tags .append (tag )
105
-
120
+ else :
121
+ out .warn (
122
+ f"InvalidVersion { tag .name } doesn't match configured tag format { tag_format } "
123
+ )
106
124
return valid_tags
107
125
108
126
@@ -351,7 +369,6 @@ def get_oldest_and_newest_rev(
351
369
oldest , newest = version .split (".." )
352
370
except ValueError :
353
371
newest = version
354
-
355
372
newest_tag = normalize_tag (newest , tag_format = tag_format , scheme = scheme )
356
373
357
374
oldest_tag = None
0 commit comments