Skip to content

Commit 8d08840

Browse files
committed
fix(changelog): Factorized TAG_FORMAT_REGEXES
1 parent 7d74d80 commit 8d08840

File tree

4 files changed

+23
-42
lines changed

4 files changed

+23
-42
lines changed

commitizen/changelog.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from commitizen import out
4545
from commitizen.bump import normalize_tag
4646
from commitizen.cz.base import ChangelogReleaseHook
47+
from commitizen.defaults import get_tag_regexes
4748
from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError
4849
from commitizen.git import GitCommit, GitTag
4950
from commitizen.version_schemes import (
@@ -97,20 +98,7 @@ def get_version_tags(
9798
scheme: type[BaseVersion], tags: list[GitTag], tag_format: str
9899
) -> list[GitTag]:
99100
valid_tags: list[GitTag] = []
100-
TAG_FORMAT_REGEXS = {
101-
"$version": 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}": 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-
}
101+
TAG_FORMAT_REGEXS = get_tag_regexes(scheme.parser.pattern)
114102
tag_format_regex = tag_format
115103
for pattern, regex in TAG_FORMAT_REGEXS.items():
116104
tag_format_regex = tag_format_regex.replace(pattern, regex)

commitizen/changelog_formats/base.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from commitizen.changelog import Metadata
1010
from commitizen.config.base_config import BaseConfig
1111
from commitizen.version_schemes import get_version_scheme
12+
from commitizen.defaults import get_tag_regexes
1213

1314
from . import ChangelogFormat
1415

@@ -31,20 +32,7 @@ def __init__(self, config: BaseConfig):
3132
def version_parser(self) -> Pattern:
3233
tag_regex: str = self.tag_format
3334
version_regex = get_version_scheme(self.config).parser.pattern
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-
}
35+
TAG_FORMAT_REGEXS = get_tag_regexes(version_regex)
4836
for pattern, regex in TAG_FORMAT_REGEXS.items():
4937
tag_regex = tag_regex.replace(pattern, regex)
5038
return re.compile(tag_regex)

commitizen/defaults.py

+17
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,20 @@ class Settings(TypedDict, total=False):
133133
)
134134
change_type_order = ["BREAKING CHANGE", "Feat", "Fix", "Refactor", "Perf"]
135135
bump_message = "bump: version $current_version → $new_version"
136+
137+
138+
def get_tag_regexes(version_regex: str) -> dict[str | Any, str | Any]:
139+
return {
140+
"$version": version_regex,
141+
"$major": r"(?P<major>\d+)",
142+
"$minor": r"(?P<minor>\d+)",
143+
"$patch": r"(?P<patch>\d+)",
144+
"$prerelease": r"(?P<prerelease>\w+\d+)?",
145+
"$devrelease": r"(?P<devrelease>\.dev\d+)?",
146+
"${version}": version_regex,
147+
"${major}": r"(?P<major>\d+)",
148+
"${minor}": r"(?P<minor>\d+)",
149+
"${patch}": r"(?P<patch>\d+)",
150+
"${prerelease}": r"(?P<prerelease>\w+\d+)?",
151+
"${devrelease}": r"(?P<devrelease>\.dev\d+)?",
152+
}

commitizen/providers/scm_provider.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Callable
55

66

7+
from commitizen.defaults import get_tag_regexes
78
from commitizen.git import get_tags
89
from commitizen.version_schemes import (
910
get_version_scheme,
@@ -24,20 +25,7 @@ class ScmProvider(VersionProvider):
2425
It is meant for `setuptools-scm` or any package manager `*-scm` provider.
2526
"""
2627

27-
TAG_FORMAT_REGEXS = {
28-
"$version": r"(?P<version>.+)",
29-
"$major": r"(?P<major>\d+)",
30-
"$minor": r"(?P<minor>\d+)",
31-
"$patch": r"(?P<patch>\d+)",
32-
"$prerelease": r"(?P<prerelease>\w+\d+)?",
33-
"$devrelease": r"(?P<devrelease>\.dev\d+)?",
34-
"${version}": r"(?P<version>.+)",
35-
"${major}": r"(?P<major>\d+)",
36-
"${minor}": r"(?P<minor>\d+)",
37-
"${patch}": r"(?P<patch>\d+)",
38-
"${prerelease}": r"(?P<prerelease>\w+\d+)?",
39-
"${devrelease}": r"(?P<devrelease>\.dev\d+)?",
40-
}
28+
TAG_FORMAT_REGEXS = get_tag_regexes(r"(?P<version>.+)")
4129

4230
def _tag_format_matcher(self) -> Callable[[str], VersionProtocol | None]:
4331
version_scheme = get_version_scheme(self.config)

0 commit comments

Comments
 (0)