Skip to content

Commit cb92f16

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

File tree

4 files changed

+66
-55
lines changed

4 files changed

+66
-55
lines changed

commitizen/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -543,13 +543,13 @@ def __call__(
543543
},
544544
{
545545
"name": ["--major"],
546-
"help": "get just the major version",
546+
"help": "get just the major version. Need to be used with --project or --verbose.",
547547
"action": "store_true",
548548
"exclusive_group": "group2",
549549
},
550550
{
551551
"name": ["--minor"],
552-
"help": "get just the minor version",
552+
"help": "get just the minor version. Need to be used with --project or --verbose.",
553553
"action": "store_true",
554554
"exclusive_group": "group2",
555555
},

commitizen/commands/version.py

Lines changed: 35 additions & 27 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,53 @@ 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. report
26+
2. commitizen
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:
3135
if self.parameter.get("report"):
3236
out.write(f"Commitizen Version: {__version__}")
33-
out.write(f"Python Version: {self.python_version}")
34-
out.write(f"Operating System: {self.operating_system}")
37+
out.write(f"Python Version: {sys.version}")
38+
out.write(f"Operating System: {platform.system()}")
3539
return
3640

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-
47-
try:
48-
version_scheme = get_version_scheme(self.config.settings)
49-
except VersionSchemeUnknown:
50-
out.error("Unknown version scheme.")
41+
if self.parameter.get("commitizen") or not (
42+
self.parameter.get("project") or self.parameter.get("verbose")
43+
):
44+
if self.parameter.get("major") or self.parameter.get("minor"):
45+
out.error("Major or minor version can only be used with --project.")
5146
return
5247

53-
_version = version_scheme(version)
48+
out.write(__version__)
49+
return
5450

55-
if self.parameter.get("major"):
56-
version = f"{_version.major}"
57-
elif self.parameter.get("minor"):
58-
version = f"{_version.minor}"
51+
if self.parameter.get("verbose"):
52+
out.write(f"Installed Commitizen Version: {__version__}")
5953

60-
out.write(f"Project Version: {version}" if verbose else version)
54+
try:
55+
version = get_provider(self.config).get_version()
56+
except NoVersionSpecifiedError:
57+
out.error("No project information in this project.")
58+
return
59+
try:
60+
version_scheme = get_version_scheme(self.config.settings)(version)
61+
except VersionSchemeUnknown:
62+
out.error("Unknown version scheme.")
6163
return
6264

63-
# if no argument is given, show installed commitizen version
64-
out.write(f"{__version__}")
65+
if self.parameter.get("major"):
66+
version = f"{version_scheme.major}"
67+
elif self.parameter.get("minor"):
68+
version = f"{version_scheme.minor}"
69+
70+
out.write(
71+
f"Project Version: {version}" if self.parameter.get("verbose") else version
72+
)

tests/commands/test_version_command.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,31 @@
1111
from tests.utils import skip_below_py_3_10
1212

1313

14-
def test_version_for_showing_project_version(config, capsys):
15-
# No version exist
14+
def test_version_for_showing_project_version_error(config, capsys):
15+
# No version specified in config
1616
commands.Version(
1717
config,
18-
{"report": False, "project": True, "commitizen": False, "verbose": False},
18+
{"project": True},
1919
)()
2020
captured = capsys.readouterr()
2121
assert "No project information in this project." in captured.err
2222

23+
24+
def test_version_for_showing_project_version(config, capsys):
2325
config.settings["version"] = "v0.0.1"
2426
commands.Version(
2527
config,
26-
{"report": False, "project": True, "commitizen": False, "verbose": False},
28+
{"project": True},
2729
)()
2830
captured = capsys.readouterr()
2931
assert "v0.0.1" in captured.out
3032

3133

32-
def test_version_for_showing_commitizen_version(config, capsys):
33-
commands.Version(
34-
config,
35-
{"report": False, "project": False, "commitizen": True, "verbose": False},
36-
)()
37-
captured = capsys.readouterr()
38-
assert f"{__version__}" in captured.out
39-
40-
# default showing commitizen version
34+
@pytest.mark.parametrize("project", (True, False))
35+
def test_version_for_showing_commitizen_version(config, capsys, project: bool):
4136
commands.Version(
4237
config,
43-
{"report": False, "project": False, "commitizen": False, "verbose": False},
38+
{"project": project, "commitizen": True},
4439
)()
4540
captured = capsys.readouterr()
4641
assert f"{__version__}" in captured.out
@@ -49,7 +44,7 @@ def test_version_for_showing_commitizen_version(config, capsys):
4944
def test_version_for_showing_both_versions(config, capsys):
5045
commands.Version(
5146
config,
52-
{"report": False, "project": False, "commitizen": False, "verbose": True},
47+
{"verbose": True},
5348
)()
5449
captured = capsys.readouterr()
5550
assert f"Installed Commitizen Version: {__version__}" in captured.out
@@ -58,7 +53,7 @@ def test_version_for_showing_both_versions(config, capsys):
5853
config.settings["version"] = "v0.0.1"
5954
commands.Version(
6055
config,
61-
{"report": False, "project": False, "commitizen": False, "verbose": True},
56+
{"verbose": True},
6257
)()
6358
captured = capsys.readouterr()
6459
expected_out = (
@@ -70,7 +65,7 @@ def test_version_for_showing_both_versions(config, capsys):
7065
def test_version_for_showing_commitizen_system_info(config, capsys):
7166
commands.Version(
7267
config,
73-
{"report": True, "project": False, "commitizen": False, "verbose": False},
68+
{"report": True},
7469
)()
7570
captured = capsys.readouterr()
7671
assert f"Commitizen Version: {__version__}" in captured.out
@@ -96,7 +91,6 @@ def test_version_use_version_provider(
9691
commands.Version(
9792
config,
9893
{
99-
"report": False,
10094
"project": project,
10195
"verbose": not project,
10296
},
@@ -135,16 +129,20 @@ def test_version_command_shows_description_when_use_help_option(
135129

136130

137131
@pytest.mark.parametrize(
138-
"version, expected_version", (("1.0.0", "1\n"), ("2.1.3", "2\n"), ("0.0.1", "0\n"))
132+
"version, expected_version",
133+
[
134+
("1.0.0", "1\n"),
135+
("2.1.3", "2\n"),
136+
("0.0.1", "0\n"),
137+
("0.1.0", "0\n"),
138+
],
139139
)
140140
def test_version_just_major(config, capsys, version: str, expected_version: str):
141141
config.settings["version"] = version
142142
commands.Version(
143143
config,
144144
{
145-
"report": False,
146145
"project": True,
147-
"verbose": False,
148146
"major": True,
149147
},
150148
)()
@@ -154,16 +152,19 @@ def test_version_just_major(config, capsys, version: str, expected_version: str)
154152

155153
@pytest.mark.parametrize(
156154
"version, expected_version",
157-
(("1.0.0", "0\n"), ("2.1.3", "1\n"), ("0.0.1", "0\n"), ("0.1.0", "1\n")),
155+
[
156+
("1.0.0", "0\n"),
157+
("2.1.3", "1\n"),
158+
("0.0.1", "0\n"),
159+
("0.1.0", "1\n"),
160+
],
158161
)
159162
def test_version_just_minor(config, capsys, version: str, expected_version: str):
160163
config.settings["version"] = version
161164
commands.Version(
162165
config,
163166
{
164-
"report": False,
165167
"project": True,
166-
"verbose": False,
167168
"minor": True,
168169
},
169170
)()

tests/commands/test_version_command/test_version_command_shows_description_when_use_help_option.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ options:
1010
-c, --commitizen get the version of the installed commitizen
1111
-v, --verbose get the version of both the installed commitizen and the
1212
current project
13-
--major get just the major version
14-
--minor get just the minor version
13+
--major get just the major version. Need to be used with --project
14+
or --verbose.
15+
--minor get just the minor version. Need to be used with --project
16+
or --verbose.

0 commit comments

Comments
 (0)