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