1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
"""
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
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:
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)
|