Skip to content

Commit df79339

Browse files
committed
feat(version): add the ability to just print major or minor version
1 parent 99360ad commit df79339

File tree

5 files changed

+112
-39
lines changed

5 files changed

+112
-39
lines changed

commitizen/cli.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,18 @@ def __call__(
543543
"action": "store_true",
544544
"exclusive_group": "group1",
545545
},
546+
{
547+
"name": ["--major"],
548+
"help": "get just the major version",
549+
"action": "store_true",
550+
"exclusive_group": "group2",
551+
},
552+
{
553+
"name": ["--minor"],
554+
"help": "get just the minor version",
555+
"action": "store_true",
556+
"exclusive_group": "group2",
557+
},
546558
],
547559
},
548560
],

commitizen/commands/version.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
from commitizen import out
66
from commitizen.__version__ import __version__
77
from commitizen.config import BaseConfig
8-
from commitizen.exceptions import NoVersionSpecifiedError
8+
from commitizen.exceptions import NoVersionSpecifiedError, VersionSchemeUnknown
99
from commitizen.providers import get_provider
10+
from commitizen.version_schemes import get_version_scheme
1011

1112

1213
class VersionArgs(TypedDict, total=False):
1314
report: bool
1415
project: bool
1516
verbose: bool
17+
major: bool
18+
minor: bool
1619

1720

1821
class Version:
@@ -41,6 +44,17 @@ def __call__(self) -> None:
4144
out.error("No project information in this project.")
4245
return
4346

47+
try:
48+
version_scheme = get_version_scheme(self.config.settings)
49+
except VersionSchemeUnknown:
50+
out.error("Unknown version scheme.")
51+
_version = version_scheme(version)
52+
53+
if self.parameter.get("major"):
54+
version = f"{_version.major}"
55+
elif self.parameter.get("minor"):
56+
version = f"{_version.minor}"
57+
4458
out.write(f"Project Version: {version}" if verbose else version)
4559
return
4660

commitizen/version_schemes.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,9 @@ def _get_prerelease(self) -> str:
410410
def get_version_scheme(settings: Settings, name: str | None = None) -> VersionScheme:
411411
"""
412412
Get the version scheme as defined in the configuration
413-
or from an overridden `name`
413+
or from an overridden `name`.
414+
415+
414416
415417
:raises VersionSchemeUnknown: if the version scheme is not found.
416418
"""

docs/images/cli_help/cz_version___help.svg

Lines changed: 45 additions & 37 deletions
Loading

tests/commands/test_version_command.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,40 @@ def test_version_command_shows_description_when_use_help_option(
119119

120120
out, _ = capsys.readouterr()
121121
file_regression.check(out, extension=".txt")
122+
123+
124+
@pytest.mark.parametrize(
125+
"version, expected_version", (("1.0.0", "1\n"), ("2.1.3", "2\n"), ("0.0.1", "0\n"))
126+
)
127+
def test_version_just_major(config, capsys, version: str, expected_version: str):
128+
config.settings["version"] = version
129+
commands.Version(
130+
config,
131+
{
132+
"report": False,
133+
"project": True,
134+
"verbose": False,
135+
"major": True,
136+
},
137+
)()
138+
captured = capsys.readouterr()
139+
assert expected_version == captured.out
140+
141+
142+
@pytest.mark.parametrize(
143+
"version, expected_version",
144+
(("1.0.0", "0\n"), ("2.1.3", "1\n"), ("0.0.1", "0\n"), ("0.1.0", "1\n")),
145+
)
146+
def test_version_just_minor(config, capsys, version: str, expected_version: str):
147+
config.settings["version"] = version
148+
commands.Version(
149+
config,
150+
{
151+
"report": False,
152+
"project": True,
153+
"verbose": False,
154+
"minor": True,
155+
},
156+
)()
157+
captured = capsys.readouterr()
158+
assert expected_version == captured.out

0 commit comments

Comments
 (0)