11from __future__ import annotations
22
33import os
4+ import re
45from abc import ABCMeta
56from re import Pattern
67from typing import IO , Any , ClassVar
@@ -24,30 +25,29 @@ def __init__(self, config: BaseConfig):
2425 # Constructor needs to be redefined because `Protocol` prevent instantiation by default
2526 # See: https://bugs.python.org/issue44807
2627 self .config = config
27- self .tag_format = self .config .settings . get ( "tag_format" )
28+ self .tag_format = self .config .settings [ "tag_format" ]
2829
2930 @property
3031 def version_parser (self ) -> Pattern :
32+ tag_regex : str = self .tag_format
3133 version_regex = get_version_scheme (self .config ).parser .pattern
32- if self .tag_format != "$version" :
33- TAG_FORMAT_REGEXS = {
34- "$version" : version_regex ,
35- "$major" : "(?P<major>\d+)" ,
36- "$minor" : "(?P<minor>\d+)" ,
37- "$patch" : "(?P<patch>\d+)" ,
38- "$prerelease" : "(?P<prerelease>\w+\d+)?" ,
39- "$devrelease" : "(?P<devrelease>\.dev\d+)?" ,
40- "${version}" : version_regex ,
41- "${major}" : "(?P<major>\d+)" ,
42- "${minor}" : "(?P<minor>\d+)" ,
43- "${patch}" : "(?P<patch>\d+)" ,
44- "${prerelease}" : "(?P<prerelease>\w+\d+)?" ,
45- "${devrelease}" : "(?P<devrelease>\.dev\d+)?" ,
46- }
47- version_regex = self .tag_format
48- for pattern , regex in TAG_FORMAT_REGEXS .items ():
49- version_regex = version_regex .replace (pattern , regex )
50- return rf"{ version_regex } "
34+ TAG_FORMAT_REGEXS = {
35+ "$version" : version_regex ,
36+ "$major" : r"(?P<major>\d+)" ,
37+ "$minor" : r"(?P<minor>\d+)" ,
38+ "$patch" : r"(?P<patch>\d+)" ,
39+ "$prerelease" : r"(?P<prerelease>\w+\d+)?" ,
40+ "$devrelease" : r"(?P<devrelease>\.dev\d+)?" ,
41+ "${version}" : version_regex ,
42+ "${major}" : r"(?P<major>\d+)" ,
43+ "${minor}" : r"(?P<minor>\d+)" ,
44+ "${patch}" : r"(?P<patch>\d+)" ,
45+ "${prerelease}" : r"(?P<prerelease>\w+\d+)?" ,
46+ "${devrelease}" : r"(?P<devrelease>\.dev\d+)?" ,
47+ }
48+ for pattern , regex in TAG_FORMAT_REGEXS .items ():
49+ tag_regex = tag_regex .replace (pattern , regex )
50+ return re .compile (tag_regex )
5151
5252 def get_metadata (self , filepath : str ) -> Metadata :
5353 if not os .path .isfile (filepath ):
0 commit comments