Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion commitizen/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import argparse
import logging
import platform
import sys
from copy import deepcopy
from functools import partial
Expand All @@ -13,6 +14,7 @@
from decli import cli

from commitizen import commands, config, out, version_schemes
from commitizen.__version__ import __version__
from commitizen.defaults import DEFAULT_SETTINGS
from commitizen.exceptions import (
CommitizenException,
Expand Down Expand Up @@ -104,10 +106,20 @@ def __call__(
"required": False,
"help": "Comma-separated error codes that won't raise error, e.g., cz -nr 1,2,3 bump. See codes at https://commitizen-tools.github.io/commitizen/exit_codes/",
},
{
"name": ["-v", "--version"],
"action": "store_true",
"help": "Show the version of the installed commitizen",
},
{
"name": ["--report"],
"action": "store_true",
"help": "Show system information for reporting bugs",
},
],
"subcommands": {
"title": "commands",
"required": True,
"required": False,
"commands": [
{
"name": ["init"],
Expand Down Expand Up @@ -685,6 +697,21 @@ def main() -> None:
raise NoCommandFoundError()
raise e

if getattr(args, "version", False):
out.write(__version__)
raise ExpectedExit()

if getattr(args, "report", False) and (
not hasattr(args, "func") or args.func is not commands.Version
):
out.write(f"Commitizen Version: {__version__}")
out.write(f"Python Version: {sys.version}")
out.write(f"Operating System: {platform.system()}")
raise ExpectedExit()

if not hasattr(args, "func"):
raise NoCommandFoundError()

arguments = vars(args)
if unknown_args:
# Raise error for extra-args without -- separation
Expand Down
13 changes: 13 additions & 0 deletions commitizen/commands/version.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import platform
import sys
import warnings
from typing import TypedDict

from packaging.version import InvalidVersion
Expand Down Expand Up @@ -45,6 +46,12 @@ def __init__(self, config: BaseConfig, arguments: VersionArgs) -> None:

def __call__(self) -> None:
if self.arguments.get("report"):
warnings.warn(
"`cz version --report` is deprecated and will be removed in v5. "
"Use `cz --report` instead.",
DeprecationWarning,
stacklevel=2,
)
out.write(f"Commitizen Version: {__version__}")
out.write(f"Python Version: {sys.version}")
out.write(f"Operating System: {platform.system()}")
Expand All @@ -54,6 +61,12 @@ def __call__(self) -> None:
out.write(f"Installed Commitizen Version: {__version__}")

if self.arguments.get("commitizen"):
warnings.warn(
"`cz version --commitizen` is deprecated and will be removed in v5. "
"Use `cz --version` instead.",
DeprecationWarning,
stacklevel=2,
)
out.write(__version__)
return

Expand Down
20 changes: 20 additions & 0 deletions tests/commands/test_version_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,23 @@ def test_version_no_arguments_shows_commitizen_version(config, capsys):
commands.Version(config, {})()
captured = capsys.readouterr()
assert captured.out.strip() == __version__


def test_version_report_emits_deprecation_warning(config, capsys):
with pytest.warns(
DeprecationWarning,
match=r"`cz version --report` is deprecated.*Use `cz --report` instead",
):
commands.Version(config, {"report": True})()
captured = capsys.readouterr()
assert f"Commitizen Version: {__version__}" in captured.out


def test_version_commitizen_emits_deprecation_warning(config, capsys):
with pytest.warns(
DeprecationWarning,
match=r"`cz version --commitizen` is deprecated.*Use `cz --version` instead",
):
commands.Version(config, {"commitizen": True})()
captured = capsys.readouterr()
assert __version__ in captured.out
43 changes: 43 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from pytest_mock import MockFixture

from commitizen import cli
from commitizen.__version__ import __version__
from commitizen.exceptions import (
ConfigFileNotFound,
ExpectedExit,
Expand Down Expand Up @@ -55,6 +56,48 @@ def test_cz_with_arg_but_without_command(util: UtilFixture):
assert "Command is required" in str(excinfo.value)


def test_cz_with_version_arg(util: UtilFixture, capsys):
"""Test that cz shows the version when --version is used."""
with pytest.raises(ExpectedExit):
util.run_cli("--version")
out, _ = capsys.readouterr()
assert __version__ in out


def test_cz_with_version_short_arg(util: UtilFixture, capsys):
"""Test that cz shows the version when -v is used."""
with pytest.raises(ExpectedExit):
util.run_cli("-v")
out, _ = capsys.readouterr()
assert __version__ in out


def test_cz_version_flag_takes_precedence_over_subcommand(util: UtilFixture, capsys):
"""Test that --version takes precedence even when a subcommand is given."""
with pytest.raises(ExpectedExit):
util.run_cli("--version", "bump")
out, _ = capsys.readouterr()
assert __version__ in out


def test_cz_with_report_arg(util: UtilFixture, capsys):
"""Test that cz shows the report when --report is used."""
with pytest.raises(ExpectedExit):
util.run_cli("--report")
out, _ = capsys.readouterr()
assert "Commitizen Version:" in out
assert "Python Version:" in out
assert "Operating System:" in out


def test_cz_report_flag_takes_precedence_over_subcommand(util: UtilFixture, capsys):
"""Test that --report takes precedence over non-version subcommands."""
with pytest.raises(ExpectedExit):
util.run_cli("--report", "bump")
out, _ = capsys.readouterr()
assert "Commitizen Version:" in out


def test_name(util: UtilFixture, capsys):
util.run_cli("-n", "cz_jira", "example")
out, _ = capsys.readouterr()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +0,0 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from 'init', 'commit', 'c', 'ls', 'example', 'info', 'schema', 'bump', 'changelog', 'ch', 'check', 'version')
Original file line number Diff line number Diff line change
@@ -1,4 +0,0 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from 'init', 'commit', 'c', 'ls', 'example', 'info', 'schema', 'bump', 'changelog', 'ch', 'check', 'version')
Original file line number Diff line number Diff line change
@@ -1,4 +0,0 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...
cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version)
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...
cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...
cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version)
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...
cz: error: the following arguments are required: {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...
cz: error: argument {init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}: invalid choice: 'invalidCommand' (choose from init, commit, c, ls, example, info, schema, bump, changelog, ch, check, version)
5 changes: 4 additions & 1 deletion tests/test_cli/test_no_argv_py_3_10_.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...

Expand All @@ -16,6 +17,8 @@ options:
e.g., cz -nr 1,2,3 bump. See codes at
https://commitizen-
tools.github.io/commitizen/exit_codes/
-v, --version Show the version of the installed commitizen
--report Show system information for reporting bugs

commands:
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Expand Down
5 changes: 4 additions & 1 deletion tests/test_cli/test_no_argv_py_3_11_.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...

Expand All @@ -16,6 +17,8 @@ options:
e.g., cz -nr 1,2,3 bump. See codes at
https://commitizen-
tools.github.io/commitizen/exit_codes/
-v, --version Show the version of the installed commitizen
--report Show system information for reporting bugs

commands:
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Expand Down
5 changes: 4 additions & 1 deletion tests/test_cli/test_no_argv_py_3_12_.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
...

Expand All @@ -16,6 +17,8 @@ options:
e.g., cz -nr 1,2,3 bump. See codes at
https://commitizen-
tools.github.io/commitizen/exit_codes/
-v, --version Show the version of the installed commitizen
--report Show system information for reporting bugs

commands:
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Expand Down
5 changes: 4 additions & 1 deletion tests/test_cli/test_no_argv_py_3_13_.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...

Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management.
Expand All @@ -15,6 +16,8 @@ options:
e.g., cz -nr 1,2,3 bump. See codes at
https://commitizen-
tools.github.io/commitizen/exit_codes/
-v, --version Show the version of the installed commitizen
--report Show system information for reporting bugs

commands:
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Expand Down
5 changes: 4 additions & 1 deletion tests/test_cli/test_no_argv_py_3_14_.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE]
usage: cz [-h] [--config CONFIG] [--debug] [-n NAME] [-nr NO_RAISE] [-v]
[--report]
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version} ...

Commitizen is a powerful release management tool that helps teams maintain consistent and meaningful commit messages while automating version management.
Expand All @@ -15,6 +16,8 @@ options:
e.g., cz -nr 1,2,3 bump. See codes at
https://commitizen-
tools.github.io/commitizen/exit_codes/
-v, --version Show the version of the installed commitizen
--report Show system information for reporting bugs

commands:
{init,commit,c,ls,example,info,schema,bump,changelog,ch,check,version}
Expand Down
Loading