170 lines
5.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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