diff options
author | Max Droy <maxime_droy@ultimatesoftware.com> | 2022-05-13 14:14:24 +0200 |
---|---|---|
committer | Bernát Gábor <gaborjbernat@gmail.com> | 2022-09-09 18:55:46 -0700 |
commit | 341350b75c62f27da03a1c20363a3e3fd83d8c72 (patch) | |
tree | 5b3dd04378b7b45895bbf632e00670d30be92d76 /src/tox/session | |
parent | 6eea1ce7847f042e26f8370c8a619e597f33dbe7 (diff) | |
download | tox-git-341350b75c62f27da03a1c20363a3e3fd83d8c72.tar.gz |
Display registered plugins with --version (#2413)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
Diffstat (limited to 'src/tox/session')
-rw-r--r-- | src/tox/session/cmd/version_flag.py | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/src/tox/session/cmd/version_flag.py b/src/tox/session/cmd/version_flag.py index 52797b6e..cad1c3f9 100644 --- a/src/tox/session/cmd/version_flag.py +++ b/src/tox/session/cmd/version_flag.py @@ -3,19 +3,46 @@ Display the version information about tox. """ from __future__ import annotations +import sys +from argparse import SUPPRESS, Action, ArgumentParser, Namespace from pathlib import Path +from typing import Any, Sequence, cast -from tox.config.cli.parser import ToxParser +import tox +from tox.config.cli.parser import HelpFormatter, ToxParser from tox.plugin import impl +from tox.plugin.manager import MANAGER +from tox.version import version @impl def tox_add_option(parser: ToxParser) -> None: - import tox - from tox.version import version - - parser.add_argument( - "--version", - action="version", - version=f"{version} from {Path(tox.__file__).absolute()}", - ) + class _V(Action): + def __init__(self, option_strings: Sequence[str], dest: str = SUPPRESS) -> None: + help_msg = "show program's and plugins version number and exit" + super().__init__(option_strings=option_strings, dest=dest, nargs=0, help=help_msg, default=SUPPRESS) + + def __call__( + self, + parser: ArgumentParser, + namespace: Namespace, # noqa: U100 + values: str | Sequence[Any] | None, # noqa: U100 + option_string: str | None = None, # noqa: U100 + ) -> None: + formatter = cast(HelpFormatter, parser._get_formatter()) + formatter.add_raw_text(get_version_info()) + parser._print_message(formatter.format_help(), sys.stdout) + parser.exit() + + parser.add_argument("--version", action=_V) + + +def get_version_info() -> str: + out = [f"{version} from {Path(tox.__file__).absolute()}"] + plugin_info = MANAGER.manager.list_plugin_distinfo() + if plugin_info: + out.append("registered plugins:") + for module, egg_info in plugin_info: + source = getattr(module, "__file__", repr(module)) + out.append(f" {egg_info.project_name}-{egg_info.version} at {source}") + return "\n".join(out) |