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>
This commit is contained in:
1 parent
502f828c6f
commit
06ca4ab0c6
5 files changed
+281
-698
No files matched your search
@@ -5,21 +5,17 @@ _proxy_cli() {
|
||||
"${PROXY_CLIENT_BIN:-proxy-client}" "$@"
|
||||
}
|
||||
|
||||
_proxy_apply_env_file() {
|
||||
local output_file="$1" line key value
|
||||
# Применяет вывод "proxy-client env" целиком или не применяет ничего.
|
||||
_proxy_apply_env() {
|
||||
local line key
|
||||
local -A proxy_values=()
|
||||
local -a allowed_keys=(
|
||||
HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
|
||||
http_proxy https_proxy all_proxy no_proxy
|
||||
)
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
while IFS= read -r line; do
|
||||
if [[ "$line" != *=* ]]; then
|
||||
echo "Ошибка: proxy-client env вернул строку без '='" >&2
|
||||
return 1
|
||||
fi
|
||||
key="${line%%=*}"
|
||||
value="${line#*=}"
|
||||
case "$key" in
|
||||
HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY|http_proxy|https_proxy|all_proxy|no_proxy) ;;
|
||||
*)
|
||||
@@ -27,38 +23,20 @@ _proxy_apply_env_file() {
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
proxy_values["$key"]="$value"
|
||||
done < "$output_file"
|
||||
proxy_values["$key"]="${line#*=}"
|
||||
done <<< "$1"
|
||||
|
||||
for key in "${allowed_keys[@]}"; do
|
||||
if [[ -n "${proxy_values[$key]+set}" ]]; then
|
||||
printf -v "$key" '%s' "${proxy_values[$key]}"
|
||||
export "$key"
|
||||
fi
|
||||
for key in "${!proxy_values[@]}"; do
|
||||
export "$key=${proxy_values[$key]}"
|
||||
done
|
||||
}
|
||||
|
||||
proxy_on() {
|
||||
local output_file old_umask
|
||||
old_umask="$(umask)"
|
||||
umask 077
|
||||
if ! output_file="$(mktemp "${TMPDIR:-/tmp}/proxy-client-env.XXXXXX")"; then
|
||||
umask "$old_umask"
|
||||
echo "Ошибка: не удалось создать временный файл для proxy-env" >&2
|
||||
return 1
|
||||
fi
|
||||
umask "$old_umask"
|
||||
if ! _proxy_cli env > "$output_file"; then
|
||||
rm -f "$output_file"
|
||||
local output
|
||||
if ! output="$(_proxy_cli env)" || ! _proxy_apply_env "$output"; then
|
||||
echo "Ошибка: прокси не включён" >&2
|
||||
return 1
|
||||
fi
|
||||
if ! _proxy_apply_env_file "$output_file"; then
|
||||
rm -f "$output_file"
|
||||
echo "Ошибка: прокси не включён" >&2
|
||||
return 1
|
||||
fi
|
||||
rm -f "$output_file"
|
||||
echo "Прокси включён"
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user