добавила режим dry-run для команд install и remove

This commit is contained in:
2026-05-08 00:51:31 +03:00
parent 664b87e631
commit ac6e76ec81
2 changed files with 42 additions and 6 deletions

View File

@@ -25,7 +25,7 @@ class PackageManager:
self.db = DatabaseManager(self.root)
def install(self, package_name: str) -> bool:
def install(self, package_name: str, dry_run: bool = False) -> bool:
print_step(f"Поиск пакета {package_name}...")
meta_path = os.path.join(self.repo_path, "packages", package_name, "meta.json")
@@ -43,6 +43,23 @@ class PackageManager:
print_warning(f"Пакет {package_name} уже установлен")
return True
# DRY-RUN: только показываем, ничего не делаем
if dry_run:
print("🔍 РЕЖИМ DRY-RUN (ничего не устанавливается)")
print(f"\n📦 Будет установлен: {pkg.full_name()}")
if pkg.depends:
print(f" Зависимости: {', '.join(pkg.depends)}")
else:
print(f" Зависимости: нет")
print(f" Файлы ({len(pkg.files)}):")
for f in pkg.files:
print(f" {f['destination']}")
if self.sandbox_mode:
print(f"\n🏖️ Установка будет выполнена в песочницу: {self.root}")
print(f"\n✅ Установка не произведена (dry-run)")
return True
# РЕАЛЬНАЯ УСТАНОВКА
print_package(f"Установка {pkg.full_name()}...")
source_dir = os.path.join(self.repo_path, "packages", package_name, "files")
@@ -65,7 +82,7 @@ class PackageManager:
return True
def remove(self, package_name: str, force: bool = False) -> bool:
def remove(self, package_name: str, force: bool = False, dry_run: bool = False) -> bool:
print_step(f"Поиск пакета {package_name}...")
if not self.db.is_installed(package_name):
@@ -74,6 +91,21 @@ class PackageManager:
pkg = self.db.get_package(package_name)
# DRY-RUN: только показываем, ничего не делаем
if dry_run:
print("🔍 РЕЖИМ DRY-RUN (ничего не удаляется)")
print(f"\n🗑️ Будет удалён: {pkg.full_name()}")
print(f" Файлы ({len(pkg.files)}):")
for f in pkg.files:
dst = os.path.join(self.root, f["destination"].lstrip("/"))
if os.path.exists(dst):
print(f" {dst} (существует)")
else:
print(f" {dst} (не найден)")
print(f"\n✅ Удаление не произведено (dry-run)")
return True
# РЕАЛЬНОЕ УДАЛЕНИЕ
print_step(f"Удаление {pkg.full_name()}...")
for file_info in pkg.files: