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
49
50
51
|
from __future__ import annotations
from typing import cast
from tox.config.cli.parser import ToxParser
from tox.plugin import impl
from tox.session.cmd.run.common import env_run_create_flags, run_order
from tox.session.state import State
from tox.tox_env.runner import RunToxEnv
@impl
def tox_add_option(parser: ToxParser) -> None:
our = parser.add_command(
"depends",
["de"],
"visualize tox environment dependencies",
depends,
)
env_run_create_flags(our, mode="depends")
def depends(state: State) -> int:
to_run_list = list(state.envs.iter(only_active=False))
order, todo = run_order(state, to_run_list)
print(f"Execution order: {', '.join(order)}")
deps: dict[str, list[str]] = {k: [o for o in order if o in v] for k, v in todo.items()}
deps["ALL"] = to_run_list
def _handle(at: int, env: str) -> None:
print(" " * at, end="")
print(env, end="")
if env != "ALL":
run_env = cast(RunToxEnv, state.envs[env])
packager_list: list[str] = []
try:
for pkg_env in run_env.package_envs:
packager_list.append(pkg_env.name)
except Exception as exception:
packager_list.append(f"... ({exception})")
names = " | ".join(packager_list)
if names:
print(f" ~ {names}", end="")
print("")
at += 1
for dep in deps[env]:
_handle(at, dep)
_handle(0, "ALL")
return 0
|