Skip to content

Commit c504419

Browse files
robertschweizerLee-W
authored andcommitted
refactor: Make tag_format properly default to $version
We've been using this default already in `normalize_tag`, but setting this value in the settings dict is cleaner.
1 parent 7f86f15 commit c504419

File tree

9 files changed

+18
-23
lines changed

9 files changed

+18
-23
lines changed

Diff for: commitizen/bump.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def _version_to_regex(version: str) -> str:
101101

102102
def normalize_tag(
103103
version: Version | str,
104-
tag_format: str | None = None,
104+
tag_format: str,
105105
scheme: VersionScheme | None = None,
106106
) -> str:
107107
"""The tag and the software version might be different.
@@ -118,9 +118,6 @@ def normalize_tag(
118118
scheme = scheme or DEFAULT_SCHEME
119119
version = scheme(version) if isinstance(version, str) else version
120120

121-
if not tag_format:
122-
return str(version)
123-
124121
major, minor, patch = version.release
125122
prerelease = version.prerelease or ""
126123

Diff for: commitizen/commands/changelog.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ def __init__(self, config: BaseConfig, args):
5757
or defaults.change_type_order
5858
)
5959
self.rev_range = args.get("rev_range")
60-
self.tag_format = args.get("tag_format") or self.config.settings.get(
61-
"tag_format"
60+
self.tag_format: str = (
61+
args.get("tag_format") or self.config.settings["tag_format"]
6262
)
6363
self.merge_prerelease = args.get(
6464
"merge_prerelease"

Diff for: commitizen/commands/init.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from commitizen.__version__ import __version__
1111
from commitizen.config import BaseConfig, JsonConfig, TomlConfig, YAMLConfig
1212
from commitizen.cz import registry
13-
from commitizen.defaults import config_files
13+
from commitizen.defaults import DEFAULT_SETTINGS, config_files
1414
from commitizen.exceptions import InitFailedError, NoAnswersError
1515
from commitizen.git import get_latest_tag_name, get_tag_names, smart_open
1616
from commitizen.version_schemes import KNOWN_SCHEMES, Version, get_version_scheme
@@ -203,14 +203,15 @@ def _ask_tag_format(self, latest_tag) -> str:
203203
f'Is "{tag_format}" the correct tag format?', style=self.cz.style
204204
).unsafe_ask()
205205

206+
default_format = DEFAULT_SETTINGS["tag_format"]
206207
if not is_correct_format:
207208
tag_format = questionary.text(
208-
'Please enter the correct version format: (default: "$version")',
209+
f'Please enter the correct version format: (default: "{default_format}")',
209210
style=self.cz.style,
210211
).unsafe_ask()
211212

212213
if not tag_format:
213-
tag_format = "$version"
214+
tag_format = default_format
214215
return tag_format
215216

216217
def _ask_version_provider(self) -> str:

Diff for: commitizen/defaults.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Settings(TypedDict, total=False):
3939
version_provider: str | None
4040
version_scheme: str | None
4141
version_type: str | None
42-
tag_format: str | None
42+
tag_format: str
4343
bump_message: str | None
4444
allow_abort: bool
4545
allowed_prefixes: list[str]
@@ -73,7 +73,7 @@ class Settings(TypedDict, total=False):
7373
"version_files": [],
7474
"version_provider": "commitizen",
7575
"version_scheme": None,
76-
"tag_format": None, # example v$version
76+
"tag_format": "$version", # example v$version
7777
"bump_message": None, # bumped v$current_version to $new_version
7878
"allow_abort": False,
7979
"allowed_prefixes": [

Diff for: commitizen/providers.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ class ScmProvider(VersionProvider):
195195

196196
def _tag_format_matcher(self) -> Callable[[str], str | None]:
197197
version_scheme = get_version_scheme(self.config)
198-
pattern = self.config.settings.get("tag_format")
199-
if pattern in (None, "$version"):
198+
pattern = self.config.settings["tag_format"]
199+
if pattern == "$version":
200200
pattern = version_scheme.parser.pattern
201201
for var, tag_pattern in self.TAG_FORMAT_REGEXS.items():
202202
pattern = pattern.replace(var, tag_pattern)

Diff for: docs/bump.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ These are used in:
326326
* If `--incremental`: Using latest version found in the changelog, scan existing Git tags with 89\% similarity match.
327327
* `--rev-range` is converted to Git tag names with `tag_format` before searching Git history.
328328
* If the `scm` `version_provider` is used, it uses different regexes to find the previous version tags:
329-
* If `tag_format` is unset or set to `$version`: `VersionProtocol.parser` (allows `v` prefix)
329+
* If `tag_format` is set to `$version` (default): `VersionProtocol.parser` (allows `v` prefix)
330330
* If `tag_format` is set: Custom regex similar to SemVer (not as lenient as PEP440 e.g. on dev-releases)
331331
332332
Commitizen supports 2 types of formats, a simple and a more complex.
@@ -346,7 +346,7 @@ In your `pyproject.toml` or `.cz.toml`
346346
tag_format = "v$major.$minor.$patch$prerelease"
347347
```
348348
349-
The variables must be preceded by a `$` sign.
349+
The variables must be preceded by a `$` sign. Default is `$version`.
350350
351351
Supported variables:
352352

Diff for: docs/config.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Select a version scheme from the following options [`pep440`, `semver`]. Useful
4646

4747
Type: `str`
4848

49-
Default: `None`
49+
Default: `$version`
5050

5151
Format for the git tag, useful for old projects, that use a convention like `"v1.2.1"`. [Read more][tag_format]
5252

Diff for: tests/test_conf.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"version": "1.0.0",
4747
"version_provider": "commitizen",
4848
"version_scheme": None,
49-
"tag_format": None,
49+
"tag_format": "$version",
5050
"bump_message": None,
5151
"allow_abort": False,
5252
"allowed_prefixes": ["Merge", "Revert", "Pull request", "fixup!", "squash!"],
@@ -69,7 +69,7 @@
6969
"version": "2.0.0",
7070
"version_provider": "commitizen",
7171
"version_scheme": None,
72-
"tag_format": None,
72+
"tag_format": "$version",
7373
"bump_message": None,
7474
"allow_abort": False,
7575
"allowed_prefixes": ["Merge", "Revert", "Pull request", "fixup!", "squash!"],

Diff for: tests/test_version_providers.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,8 @@ def test_file_providers(
175175
@pytest.mark.parametrize(
176176
"tag_format,tag,expected_version",
177177
(
178-
# If tag_format is None or $version, version_scheme.parser is used.
178+
# If tag_format is $version (the default), version_scheme.parser is used.
179179
# Its DEFAULT_VERSION_PARSER allows a v prefix, but matches PEP440 otherwise.
180-
(None, "0.1.0", "0.1.0"),
181-
(None, "v0.1.0", "0.1.0"),
182-
(None, "no-match-because-version-scheme-is-strict", "0.0.0"),
183180
("$version", "no-match-because-version-scheme-is-strict", "0.0.0"),
184181
("$version", "0.1.0", "0.1.0"),
185182
("$version", "v0.1.0", "0.1.0"),
@@ -202,7 +199,7 @@ def test_file_providers(
202199
)
203200
@pytest.mark.usefixtures("tmp_git_project")
204201
def test_scm_provider(
205-
config: BaseConfig, tag_format: str | None, tag: str, expected_version: str
202+
config: BaseConfig, tag_format: str, tag: str, expected_version: str
206203
):
207204
create_file_and_commit("test: fake commit")
208205
create_tag(tag)

0 commit comments

Comments
 (0)