- Updated version from 2026.05.31 to 2026.06.11 in setup.py - Replaced 'textual' with 'rich' in install_requires - Added privilege.py for managing sudo privileges with a keep-alive mechanism - Introduced process.py for handling subprocesses with enhanced control and output streaming - Created ui.py for unified console interactions and user prompts
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import shutil
|
|
from pathlib import Path
|
|
from typing import List
|
|
|
|
from cobot import ui
|
|
from cobot.ui import header, done
|
|
|
|
_PROJECT_DIR = Path(__file__).parent.parent.parent
|
|
|
|
_DIR_OPTIONS = ["build/", "install/", "log/"]
|
|
_DIR_MAP = {
|
|
"build/": _PROJECT_DIR / "build",
|
|
"install/": _PROJECT_DIR / "install",
|
|
"log/": _PROJECT_DIR / "log",
|
|
}
|
|
|
|
|
|
def _clean(dirs: List[str]) -> None:
|
|
"""Delete the selected top-level directories, printing the outcome of each.
|
|
Удаляет выбранные директории верхнего уровня, печатая результат по каждой.
|
|
"""
|
|
header("Очистка артефактов сборки")
|
|
removed = False
|
|
for label in dirs:
|
|
path = _DIR_MAP[label]
|
|
if path.exists():
|
|
shutil.rmtree(path)
|
|
ui.info(f" [green]✓[/green] Удалено {label}")
|
|
removed = True
|
|
else:
|
|
ui.info(f" [dim]Нет:[/dim] {label}")
|
|
done(True, "Очищено" if removed else "Нечего удалять")
|
|
|
|
|
|
def register(subparsers: argparse._SubParsersAction) -> None:
|
|
p = subparsers.add_parser(
|
|
"clean",
|
|
help="Remove colcon build artifacts (build/ install/ log/)",
|
|
)
|
|
p.add_argument(
|
|
"target",
|
|
nargs="?",
|
|
metavar="all",
|
|
default=None,
|
|
help="'all' to skip the prompt and delete all three directories at once",
|
|
)
|
|
p.set_defaults(func=run)
|
|
|
|
|
|
def run(args: argparse.Namespace) -> None:
|
|
"""Entry point for the clean command.
|
|
Точка входа для команды clean.
|
|
"""
|
|
if getattr(args, "target", None) == "all":
|
|
_clean(_DIR_OPTIONS)
|
|
return
|
|
|
|
dirs = ui.multiselect(
|
|
"Какие директории удалить?",
|
|
_DIR_OPTIONS,
|
|
note="Space — отметить · Enter — подтвердить",
|
|
)
|
|
if not dirs:
|
|
return
|
|
_clean(dirs)
|