Files

170 lines
5.2 KiB
Bash
Executable File

#!/bin/sh
# CPM - Calista Package Manager
# Версия: 1.2
# Проверяем, установлен ли pkg
if ! command -v pkg >/dev/null 2>&1; then
echo "Ошибка: pkg не установлен или не найден в PATH" >&2
exit 1
fi
# Функция для фильтрации стандартных пакетов FreeBSD
filter_freebsd_packages() {
#pkg info | grep -v '^FreeBSD-'
pkg query -a "%n\t%v\t%c\t%L" | grep -v '^FreeBSD-' | column -t -s $'\t'
}
# Функция для получения списка пользовательских пакетов (корневых)
get_custom_packages() {
filter_freebsd_packages | awk '{print $1}'
}
# Функция для получения имен всех установленных пакетов
get_all_packages() {
pkg info | awk '{print $1}'
}
# Обработка команд
case "$1" in
"info")
if [ "$2" = "-v" ]; then
# Подробная информация о каждом пользовательском пакете
get_custom_packages | while read -r package; do
echo "=== Информация о пакете: $package ==="
pkg info "$package"
echo ""
done
elif [ "$2" = "-dtree" ]; then
echo "Вывод всего дерева зависимостей является ресурсозатратной операцией"
printf "Вы уверены? [y/N] "
read REPLY
if echo "$REPLY" | grep -iq "^y"; then
get_custom_packages | while read -r package; do
deptree -s "$package"
echo ""
done
else
echo "Пока"
exit 1
fi
else
# Простой список пользовательских пакетов
filter_freebsd_packages
fi
;;
"sreset")
echo "==== Удаление всех пользовательских пакетов ===="
pkg unlock -ay
get_custom_packages | while read -r package; do
if [ "$package" = "pkg" ] || [ "$package" = "pkg-*" ]; then
continue
fi
echo "Удаление $package"
pkg delete -y "$package" >/dev/null 2>&1
done
pkg autoremove -y
;;
"deptree")
deptree -s "$2"
;;
"install")
if [ -z "$2" ]; then
echo "Использование: cpm install <имя_пакета>" >&2
exit 1
fi
shift
pkg install "$@"
;;
"delete"|"remove")
if [ -z "$2" ]; then
echo "Использование: cpm $1 <имя_пакета>" >&2
exit 1
fi
shift
pkg delete "$@"
;;
"autoremove")
pkg autoremove
;;
"upgrade")
pkg upgrade
;;
"update")
pkg update
;;
"search")
if [ -z "$2" ]; then
echo "Использование: cpm search <запрос>" >&2
exit 1
fi
shift
pkg search "$@"
;;
"clean")
pkg clean
;;
"version"|"-v"|"--version")
echo "CPM - Calista Package Manager v1.0.0"
echo "Использует PKG: $(pkg -v)"
;;
"help"|"-h"|"--help")
cat << EOF
CPM - Calista Package Manager
Использование: cpm <команда> [опции]
Команды:
info Список установленных пакетов (без стандартных FreeBSD)
info -v Подробная информация о всех пользовательских пакетах
info -dtree Дерево зависимостей пользовательских пакетов
deptree <пакет> Полное дерево зависимостей для конкретного пакета
install <пакет> Установить пакет
delete <пакет> Удалить пакет
autoremove Удалить неиспользуемые зависимости
upgrade Обновить все пакеты
update Обновить репозиторий пакетов
search <запрос> Поиск пакетов
clean Очистить кэш пакетов
sreset Удалить все пользовательские пакеты, за исключением pkg
version Показать версию
help Показать эту справку
Примеры:
cpm info
cpm info -v
cpm info -dtree
cpm deptree nano
cpm install nano
cpm delete nano
cpm search python
EOF
;;
*)
if [ -z "$1" ]; then
echo "Использование: cpm <команда>" >&2
echo "Для справки: cpm help" >&2
exit 1
else
echo "Неизвестная команда: $1" >&2
echo "Для справки: cpm help" >&2
exit 1
fi
;;
esac
exit 0