diff --git a/mypkg/cli/main.py b/mypkg/cli/main.py index 42a5026..16435e6 100644 --- a/mypkg/cli/main.py +++ b/mypkg/cli/main.py @@ -2,7 +2,7 @@ import argparse import sys from ..core.package_manager import PackageManager -from ..utils.colors import print_info, print_package +from ..utils.colors import print_info, print_package, print_error def main(): @@ -17,9 +17,17 @@ def main(): subparsers = parser.add_subparsers(dest='command', help='Команды') + # install install_parser = subparsers.add_parser('install', help='Установить пакет') install_parser.add_argument('package', help='Имя пакета') + # remove (НОВАЯ КОМАНДА) + remove_parser = subparsers.add_parser('remove', help='Удалить пакет') + remove_parser.add_argument('package', help='Имя пакета') + remove_parser.add_argument('--force', action='store_true', + help='Принудительное удаление') + + # list list_parser = subparsers.add_parser('list', help='Список установленных пакетов') args = parser.parse_args() @@ -32,6 +40,10 @@ def main(): if args.command == 'install': pm.install(args.package) + + elif args.command == 'remove': + pm.remove(args.package, force=args.force) + elif args.command == 'list': packages = pm.list_installed() if not packages: diff --git a/mypkg/core/package_manager.py b/mypkg/core/package_manager.py index b009423..79a061e 100644 --- a/mypkg/core/package_manager.py +++ b/mypkg/core/package_manager.py @@ -65,5 +65,30 @@ class PackageManager: return True + def remove(self, package_name: str, force: bool = False) -> bool: + """Удаляет пакет""" + print_step(f"Поиск пакета {package_name}...") + + if not self.db.is_installed(package_name): + print_error(f"Пакет {package_name} не установлен") + return False + + pkg = self.db.get_package(package_name) + + print_step(f"Удаление {pkg.full_name()}...") + + # Удаляем файлы + for file_info in pkg.files: + dst = os.path.join(self.root, file_info["destination"].lstrip("/")) + if os.path.exists(dst): + os.remove(dst) + print_step(f" Удалён: {dst}") + + # Удаляем из базы данных + self.db.remove_package(package_name) + + print_success(f"Пакет {package_name} удалён") + return True + def list_installed(self) -> List[Package]: return list(self.db.installed.values()) \ No newline at end of file