from __future__ import annotations from typing import TYPE_CHECKING, override from ....lib.log import NOTICE, log from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import ArgumentParser, Namespace class CmdDep(Cmd): # export def __init__(self, parent: Parent) -> None: super().__init__( parent, 'deps', help = 'Check for circular dependencies between given modules', ) @override def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('module', nargs = '*', help = 'Modules') parser.add_argument('-f', '--flavour', nargs = '?', default = 'build') @override async def _run(self, args: Namespace) -> None: cycle = self.app.find_circular_deps(args.module, args.flavour) if cycle: log( NOTICE, f'Found circular dependency in flavour {args.flavour}: ' ' -> '.join(cycle) ) exit(1) log( NOTICE, f'No circular dependency found for flavour {args.flavour} in modules:', ' '.join(args.module), )