Files
dotfiles/proxy-client/install.sh
T
ddadminandClaude Opus 5.5 06ca4ab0c6 refactor(proxy-client): упростить установщик пакета и shell-тесты
- install.sh ставит три прямые ссылки без Stow; чужие файлы не трогает
  и перечисляет все конфликты сразу; ~/.local и ~/.config могут быть
  ссылками; блок в ~/.bashrc дописывается, если нет маркера.
- proxy_on читает вывод proxy-client env без временного файла.
- Тесты Bash-функций работают через поддельный PROXY_CLIENT_BIN.
- test_proxy_client_full.sh запускает только тесты proxy-client,
  прогон под Python 3.8 — если есть uv.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 09:28:07 -04:00

94 lines
3.0 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.
#!/usr/bin/env bash
# Ставит proxy-client в домашний каталог: три ссылки на этот каталог и
# (по умолчанию) блок в ~/.bashrc. Повторный запуск ничего не меняет.
set -euo pipefail
PACKAGE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
SETUP_SHELL=1
usage() {
cat <<'EOF'
Использование: ./install.sh [--no-shell-setup]
--no-shell-setup не изменять ~/.bashrc
EOF
}
while [ "$#" -gt 0 ]; do
case "$1" in
--no-shell-setup) SETUP_SHELL=0 ;;
-h|--help)
usage
exit 0
;;
*)
echo "Ошибка: неизвестный параметр: $1" >&2
usage >&2
exit 2
;;
esac
shift
done
# Машинные config и default.url сюда не входят: они живут только в $HOME.
LINKS=(
.local/bin/proxy-client
.config/proxy-client/shell.bash
.config/proxy-client/examples
)
# Существующая ссылка на этот же файл пакета — не конфликт, всё остальное
# (включая битую ссылку) не трогаем.
conflicts=()
for link in "${LINKS[@]}"; do
target="$HOME/$link"
if [ -e "$target" ] || [ -L "$target" ]; then
if [ "$(readlink -f "$target" 2>/dev/null)" != "$PACKAGE_DIR/$link" ]; then
conflicts+=("$target")
fi
fi
done
if [ "${#conflicts[@]}" -gt 0 ]; then
echo "Ошибка: пути уже заняты, установка не выполнена:" >&2
printf ' %s\n' "${conflicts[@]}" >&2
echo "Удалите или переименуйте их и повторите установку." >&2
exit 1
fi
mkdir -p "$HOME/.local/bin" "$HOME/.config/proxy-client"
for link in "${LINKS[@]}"; do
[ -e "$HOME/$link" ] || ln -s "$PACKAGE_DIR/$link" "$HOME/$link"
done
SHELL_BLOCK_START='# >>> proxy-client >>>'
if [ "$SETUP_SHELL" -eq 0 ]; then
echo "Настройка Bash пропущена (--no-shell-setup)."
# Команда для пользователя: $HOME и $PATH раскроются в его сессии.
# shellcheck disable=SC2016
RELOAD_COMMAND='export PATH="$HOME/.local/bin:$PATH"; source ~/.config/proxy-client/shell.bash'
else
if ! grep -Fqx "$SHELL_BLOCK_START" "$HOME/.bashrc" 2>/dev/null; then
cat >> "$HOME/.bashrc" <<EOF
$SHELL_BLOCK_START
case ":\$PATH:" in
*":\$HOME/.local/bin:"*) ;;
*) export PATH="\$HOME/.local/bin:\$PATH" ;;
esac
[ -f "\$HOME/.config/proxy-client/shell.bash" ] && source "\$HOME/.config/proxy-client/shell.bash"
# <<< proxy-client <<<
EOF
echo "В ~/.bashrc добавлен блок proxy-client."
fi
RELOAD_COMMAND='source ~/.bashrc'
fi
cat <<EOF
proxy-client установлен.
Исходный каталог должен оставаться по постоянному пути:
$PACKAGE_DIR
Примените настройки в текущей сессии: $RELOAD_COMMAND
Настройка режима описана в $PACKAGE_DIR/README.md.
EOF