Skip to content

Commit 5229525

Browse files
committed
fix(version): fix the behavior of cz version --major
1 parent f52f532 commit 5229525

File tree

2 files changed

+60
-39
lines changed

2 files changed

+60
-39
lines changed

commitizen/commands/version.py

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212

1313
class VersionArgs(TypedDict, total=False):
14+
commitizen: bool
1415
report: bool
1516
project: bool
1617
verbose: bool
@@ -19,46 +20,52 @@ class VersionArgs(TypedDict, total=False):
1920

2021

2122
class Version:
22-
"""Get the version of the installed commitizen or the current project."""
23+
"""Get the version of the installed commitizen or the current project.
24+
Precedence:
25+
1. commitizen
26+
2. report
27+
3. verbose, project
28+
"""
2329

2430
def __init__(self, config: BaseConfig, arguments: VersionArgs) -> None:
2531
self.config: BaseConfig = config
2632
self.parameter = arguments
27-
self.operating_system = platform.system()
28-
self.python_version = sys.version
2933

3034
def __call__(self) -> None:
35+
if self.parameter.get("commitizen") or not any(self.parameter.values()):
36+
# Enter this block if commitizen is explicitly requested or no argument is given
37+
out.write(f"{__version__}")
38+
return
39+
3140
if self.parameter.get("report"):
3241
out.write(f"Commitizen Version: {__version__}")
33-
out.write(f"Python Version: {self.python_version}")
34-
out.write(f"Operating System: {self.operating_system}")
42+
out.write(f"Python Version: {sys.version}")
43+
out.write(f"Operating System: {platform.system()}")
3544
return
3645

37-
if (verbose := self.parameter.get("verbose")) or self.parameter.get("project"):
38-
if verbose:
39-
out.write(f"Installed Commitizen Version: {__version__}")
40-
41-
try:
42-
version = get_provider(self.config).get_version()
43-
except NoVersionSpecifiedError:
44-
out.error("No project information in this project.")
45-
return
46+
if self.parameter.get("verbose"):
47+
out.write(f"Installed Commitizen Version: {__version__}")
4648

47-
try:
48-
version_scheme = get_version_scheme(self.config.settings)
49-
except VersionSchemeUnknown:
50-
out.error("Unknown version scheme.")
51-
return
49+
try:
50+
version = get_provider(self.config).get_version()
51+
except NoVersionSpecifiedError:
52+
out.error("No project information in this project.")
53+
return
5254

53-
_version = version_scheme(version)
55+
try:
56+
version_scheme = get_version_scheme(self.config.settings)
57+
except VersionSchemeUnknown:
58+
out.error("Unknown version scheme.")
59+
return
5460

55-
if self.parameter.get("major"):
56-
version = f"{_version.major}"
57-
elif self.parameter.get("minor"):
58-
version = f"{_version.minor}"
61+
_version = version_scheme(version)
5962

60-
out.write(f"Project Version: {version}" if verbose else version)
61-
return
63+
if self.parameter.get("major"):
64+
version = f"{_version.major}"
65+
elif self.parameter.get("minor"):
66+
version = f"{_version.minor}"
6267

63-
# if no argument is given, show installed commitizen version
64-
out.write(f"{__version__}")
68+
out.write(
69+
f"Project Version: {version}" if self.parameter.get("verbose") else version
70+
)
71+
return

tests/commands/test_version_command.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,21 @@ def test_version_command_shows_description_when_use_help_option(
135135

136136

137137
@pytest.mark.parametrize(
138-
"version, expected_version", (("1.0.0", "1\n"), ("2.1.3", "2\n"), ("0.0.1", "0\n"))
138+
"project, version, expected_version",
139+
[
140+
(proj, ver, exp)
141+
for proj in [True, False]
142+
for ver, exp in [("1.0.0", "1\n"), ("2.1.3", "2\n"), ("0.0.1", "0\n")]
143+
],
139144
)
140-
def test_version_just_major(config, capsys, version: str, expected_version: str):
145+
def test_version_just_major(
146+
config, capsys, project: bool, version: str, expected_version: str
147+
):
141148
config.settings["version"] = version
142149
commands.Version(
143150
config,
144151
{
145-
"report": False,
146-
"project": True,
147-
"verbose": False,
152+
"project": project,
148153
"major": True,
149154
},
150155
)()
@@ -153,17 +158,26 @@ def test_version_just_major(config, capsys, version: str, expected_version: str)
153158

154159

155160
@pytest.mark.parametrize(
156-
"version, expected_version",
157-
(("1.0.0", "0\n"), ("2.1.3", "1\n"), ("0.0.1", "0\n"), ("0.1.0", "1\n")),
161+
"project, version, expected_version",
162+
[
163+
(proj, ver, exp)
164+
for proj in [True, False]
165+
for ver, exp in [
166+
("1.0.0", "0\n"),
167+
("2.1.3", "1\n"),
168+
("0.0.1", "0\n"),
169+
("0.1.0", "1\n"),
170+
]
171+
],
158172
)
159-
def test_version_just_minor(config, capsys, version: str, expected_version: str):
173+
def test_version_just_minor(
174+
config, capsys, project: bool, version: str, expected_version: str
175+
):
160176
config.settings["version"] = version
161177
commands.Version(
162178
config,
163179
{
164-
"report": False,
165-
"project": True,
166-
"verbose": False,
180+
"project": project,
167181
"minor": True,
168182
},
169183
)()

0 commit comments

Comments
 (0)