Skip to content

Commit 10c7a9a

Browse files
refactor: Move bump.normalize_tag to tags.tag_from_version
1 parent 0aa98e1 commit 10c7a9a

File tree

6 files changed

+56
-43
lines changed

6 files changed

+56
-43
lines changed

commitizen/bump.py

-33
Original file line numberDiff line numberDiff line change
@@ -217,39 +217,6 @@ def _version_to_regex(version: str) -> str:
217217
return version.replace(".", r"\.").replace("+", r"\+")
218218

219219

220-
def normalize_tag(
221-
version: Union[VersionProtocol, str],
222-
tag_format: str,
223-
version_type_cls: Optional[Type[VersionProtocol]] = None,
224-
) -> str:
225-
"""The tag and the software version might be different.
226-
227-
That's why this function exists.
228-
229-
Example:
230-
| tag | version (PEP 0440) |
231-
| --- | ------- |
232-
| v0.9.0 | 0.9.0 |
233-
| ver1.0.0 | 1.0.0 |
234-
| ver1.0.0.a0 | 1.0.0a0 |
235-
"""
236-
if version_type_cls is None:
237-
version_type_cls = Version
238-
if isinstance(version, str):
239-
version = version_type_cls(version)
240-
241-
major, minor, patch = version.release
242-
prerelease = ""
243-
# version.pre is needed for mypy check
244-
if version.is_prerelease and version.pre:
245-
prerelease = f"{version.pre[0]}{version.pre[1]}"
246-
247-
t = Template(tag_format)
248-
return t.safe_substitute(
249-
version=version, major=major, minor=minor, patch=patch, prerelease=prerelease
250-
)
251-
252-
253220
def create_commit_message(
254221
current_version: Union[Version, str],
255222
new_version: Union[Version, str],

commitizen/changelog.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
from packaging.version import InvalidVersion, Version
3838

3939
from commitizen import defaults
40-
from commitizen.bump import normalize_tag
4140
from commitizen.exceptions import InvalidConfigurationError, NoCommitsFoundError
4241
from commitizen.git import GitCommit, GitTag
42+
from commitizen.tags import tag_from_version
4343

4444
if sys.version_info >= (3, 8):
4545
from commitizen.version_types import VersionProtocol
@@ -341,13 +341,13 @@ def get_oldest_and_newest_rev(
341341
except ValueError:
342342
newest = version
343343

344-
newest_tag = normalize_tag(
344+
newest_tag = tag_from_version(
345345
newest, tag_format=tag_format, version_type_cls=version_type_cls
346346
)
347347

348348
oldest_tag = None
349349
if oldest:
350-
oldest_tag = normalize_tag(
350+
oldest_tag = tag_from_version(
351351
oldest, tag_format=tag_format, version_type_cls=version_type_cls
352352
)
353353

commitizen/commands/bump.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
NoVersionSpecifiedError,
2323
)
2424
from commitizen.providers import get_provider
25+
from commitizen.tags import tag_from_version
2526

2627
logger = getLogger("commitizen")
2728

@@ -161,7 +162,7 @@ def __call__(self): # noqa: C901
161162
f"--major-version-zero is meaningless for current version {current_version}"
162163
)
163164

164-
current_tag_version: str = bump.normalize_tag(
165+
current_tag_version: str = tag_from_version(
165166
current_version,
166167
tag_format=tag_format,
167168
version_type_cls=self.version_type,
@@ -223,7 +224,7 @@ def __call__(self): # noqa: C901
223224
version_type_cls=self.version_type,
224225
)
225226

226-
new_tag_version = bump.normalize_tag(
227+
new_tag_version = tag_from_version(
227228
new_version,
228229
tag_format=tag_format,
229230
version_type_cls=self.version_type,

commitizen/commands/changelog.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from packaging.version import parse
77

8-
from commitizen import bump, changelog, defaults, factory, git, out, version_types
8+
from commitizen import changelog, defaults, factory, git, out, version_types
99
from commitizen.config import BaseConfig
1010
from commitizen.defaults import DEFAULT_SETTINGS
1111
from commitizen.exceptions import (
@@ -17,6 +17,7 @@
1717
NotAllowed,
1818
)
1919
from commitizen.git import GitTag, smart_open
20+
from commitizen.tags import tag_from_version
2021

2122

2223
class Changelog:
@@ -149,7 +150,7 @@ def __call__(self):
149150
changelog_meta = changelog.get_metadata(self.file_name)
150151
latest_version = changelog_meta.get("latest_version")
151152
if latest_version:
152-
latest_tag_version: str = bump.normalize_tag(
153+
latest_tag_version: str = tag_from_version(
153154
latest_version,
154155
tag_format=self.tag_format,
155156
version_type_cls=self.version_type,

commitizen/tags.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import sys
2+
from string import Template
3+
from typing import Any, Optional, Type, Union
4+
5+
from packaging.version import Version
6+
7+
if sys.version_info >= (3, 8):
8+
from commitizen.version_types import VersionProtocol
9+
else:
10+
# workaround mypy issue for 3.7 python
11+
VersionProtocol = Any
12+
13+
14+
def tag_from_version(
15+
version: Union[VersionProtocol, str],
16+
tag_format: str,
17+
version_type_cls: Optional[Type[VersionProtocol]] = None,
18+
) -> str:
19+
"""The tag and the software version might be different.
20+
21+
That's why this function exists.
22+
23+
Example:
24+
| tag | version (PEP 0440) |
25+
| --- | ------- |
26+
| v0.9.0 | 0.9.0 |
27+
| ver1.0.0 | 1.0.0 |
28+
| ver1.0.0.a0 | 1.0.0a0 |
29+
"""
30+
if version_type_cls is None:
31+
version_type_cls = Version
32+
if isinstance(version, str):
33+
version = version_type_cls(version)
34+
35+
major, minor, patch = version.release
36+
prerelease = ""
37+
# version.pre is needed for mypy check
38+
if version.is_prerelease and version.pre:
39+
prerelease = f"{version.pre[0]}{version.pre[1]}"
40+
41+
t = Template(tag_format)
42+
return t.safe_substitute(
43+
version=version, major=major, minor=minor, patch=patch, prerelease=prerelease
44+
)

tests/test_bump_normalize_tag.py renamed to tests/test_tags.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from packaging.version import Version
33

4-
from commitizen import bump
4+
from commitizen.tags import tag_from_version
55

66
conversion = [
77
(("1.2.3", "v$version"), "v1.2.3"),
@@ -17,7 +17,7 @@
1717

1818

1919
@pytest.mark.parametrize("test_input,expected", conversion)
20-
def test_create_tag(test_input, expected):
20+
def test_tag_from_version(test_input, expected):
2121
version, format = test_input
22-
new_tag = bump.normalize_tag(Version(version), format)
22+
new_tag = tag_from_version(Version(version), format)
2323
assert new_tag == expected

0 commit comments

Comments
 (0)