diff --git a/news/9456.bugfix.rst b/news/9456.bugfix.rst new file mode 100644 index 0000000000..a1134c33e6 --- /dev/null +++ b/news/9456.bugfix.rst @@ -0,0 +1 @@ +Keep ``--version`` available only for pip and prevent its use in subcommands. diff --git a/src/pip/_internal/cli/cmdoptions.py b/src/pip/_internal/cli/cmdoptions.py index 2b99c79c71..33e2a4d538 100644 --- a/src/pip/_internal/cli/cmdoptions.py +++ b/src/pip/_internal/cli/cmdoptions.py @@ -1360,7 +1360,6 @@ def check_list_path_option(options: Values) -> None: require_virtualenv, python, verbose, - version, quiet, log, no_input, diff --git a/src/pip/_internal/cli/main_parser.py b/src/pip/_internal/cli/main_parser.py index 903c891120..230028dd1c 100644 --- a/src/pip/_internal/cli/main_parser.py +++ b/src/pip/_internal/cli/main_parser.py @@ -30,6 +30,7 @@ def create_main_parser() -> ConfigOptionParser: parser.disable_interspersed_args() parser.version = get_pip_version() + parser.add_option(cmdoptions.version()) # add the general options gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) diff --git a/tests/unit/test_base_command.py b/tests/unit/test_base_command.py index 6b44855312..10cefd2d5f 100644 --- a/tests/unit/test_base_command.py +++ b/tests/unit/test_base_command.py @@ -14,7 +14,12 @@ from pip._internal.cli import base_command from pip._internal.cli.base_command import Command -from pip._internal.cli.status_codes import BROKEN_STDOUT, SUCCESS, VIRTUALENV_NOT_FOUND +from pip._internal.cli.status_codes import ( + BROKEN_STDOUT, + SUCCESS, + UNKNOWN_ERROR, + VIRTUALENV_NOT_FOUND, +) from pip._internal.commands import commands_dict, create_command from pip._internal.utils import temp_dir from pip._internal.utils.logging import BrokenStdoutLoggingError @@ -256,3 +261,18 @@ def test_commands_ignore_require_virtualenv_is_explicit() -> None: assert not command_class.ignore_require_venv == ( name in commands_that_require_venv ) + + +@pytest.mark.parametrize("command_name", commands_dict) +def test_commands_reject_version_option( + command_name: str, + capfd: pytest.CaptureFixture[str], +) -> None: + cmd = create_command(command_name) + + with pytest.raises(SystemExit) as excinfo: + cmd.main(["--version"]) + stderr = capfd.readouterr().err + + assert excinfo.value.code == UNKNOWN_ERROR + assert "no such option: --version" in stderr