summaryrefslogtreecommitdiff
path: root/src/tox/session
diff options
context:
space:
mode:
authorMax Droy <maxime_droy@ultimatesoftware.com>2022-05-13 14:14:24 +0200
committerBernát Gábor <gaborjbernat@gmail.com>2022-09-09 18:55:46 -0700
commit341350b75c62f27da03a1c20363a3e3fd83d8c72 (patch)
tree5b3dd04378b7b45895bbf632e00670d30be92d76 /src/tox/session
parent6eea1ce7847f042e26f8370c8a619e597f33dbe7 (diff)
downloadtox-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.py45
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)