feat: добавила команду remove для удаления пакетов
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
from ..core.package_manager import PackageManager
|
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():
|
def main():
|
||||||
@@ -17,9 +17,17 @@ def main():
|
|||||||
|
|
||||||
subparsers = parser.add_subparsers(dest='command', help='Команды')
|
subparsers = parser.add_subparsers(dest='command', help='Команды')
|
||||||
|
|
||||||
|
# install
|
||||||
install_parser = subparsers.add_parser('install', help='Установить пакет')
|
install_parser = subparsers.add_parser('install', help='Установить пакет')
|
||||||
install_parser.add_argument('package', 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='Список установленных пакетов')
|
list_parser = subparsers.add_parser('list', help='Список установленных пакетов')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
@@ -32,6 +40,10 @@ def main():
|
|||||||
|
|
||||||
if args.command == 'install':
|
if args.command == 'install':
|
||||||
pm.install(args.package)
|
pm.install(args.package)
|
||||||
|
|
||||||
|
elif args.command == 'remove':
|
||||||
|
pm.remove(args.package, force=args.force)
|
||||||
|
|
||||||
elif args.command == 'list':
|
elif args.command == 'list':
|
||||||
packages = pm.list_installed()
|
packages = pm.list_installed()
|
||||||
if not packages:
|
if not packages:
|
||||||
|
|||||||
@@ -65,5 +65,30 @@ class PackageManager:
|
|||||||
|
|
||||||
return True
|
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]:
|
def list_installed(self) -> List[Package]:
|
||||||
return list(self.db.installed.values())
|
return list(self.db.installed.values())
|
||||||
Reference in New Issue
Block a user