first upload
This commit is contained in:
+108
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2034
|
||||
# Common utilities for miaur
|
||||
|
||||
MIAUR_VERSION="0.1.0"
|
||||
|
||||
# Colors (respect pacman Color / NO_COLOR / non-tty)
|
||||
_miaur_color_enabled() {
|
||||
[[ -n ${NO_COLOR:-} ]] && return 1
|
||||
[[ ! -t 1 ]] && return 1
|
||||
if [[ -f /etc/pacman.conf ]] && grep -Eq '^[[:space:]]*Color([[:space:]]|$)' /etc/pacman.conf 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
# Default: enable on tty even if pacman Color is commented
|
||||
return 0
|
||||
}
|
||||
|
||||
if _miaur_color_enabled; then
|
||||
C_RED=$'\033[31m'
|
||||
C_GREEN=$'\033[32m'
|
||||
C_YELLOW=$'\033[33m'
|
||||
C_BLUE=$'\033[34m'
|
||||
C_CYAN=$'\033[36m'
|
||||
C_BOLD=$'\033[1m'
|
||||
C_DIM=$'\033[2m'
|
||||
C_RESET=$'\033[0m'
|
||||
else
|
||||
C_RED= C_GREEN= C_YELLOW= C_BLUE= C_CYAN= C_BOLD= C_DIM= C_RESET=
|
||||
fi
|
||||
|
||||
msg() { printf '%s::%s %s\n' "${C_BOLD}${C_BLUE}" "${C_RESET}" "$*" >&2; }
|
||||
msg2() { printf '%s ->%s %s\n' "${C_BOLD}${C_BLUE}" "${C_RESET}" "$*" >&2; }
|
||||
warn() { printf '%s==>%s WARNING: %s\n' "${C_BOLD}${C_YELLOW}" "${C_RESET}" "$*" >&2; }
|
||||
error() { printf '%s==>%s ERROR: %s\n' "${C_BOLD}${C_RED}" "${C_RESET}" "$*" >&2; }
|
||||
die() { error "$*"; exit 1; }
|
||||
|
||||
need_cmd() {
|
||||
local c
|
||||
for c in "$@"; do
|
||||
command -v "$c" >/dev/null 2>&1 || die "required command not found: $c"
|
||||
done
|
||||
}
|
||||
|
||||
# Prefer system curl — some user PATH wrappers break AUR HTTPS
|
||||
resolve_curl() {
|
||||
if [[ -n ${MIAUR_CURL:-} ]]; then
|
||||
printf '%s' "$MIAUR_CURL"
|
||||
elif [[ -x /usr/bin/curl ]]; then
|
||||
printf '%s' /usr/bin/curl
|
||||
else
|
||||
command -v curl
|
||||
fi
|
||||
}
|
||||
|
||||
# Strip version constraints from a dep string: foo>=1.0 -> foo
|
||||
dep_name() {
|
||||
local d=$1
|
||||
d=${d%%[><=]*}
|
||||
d=${d%%:*}
|
||||
printf '%s' "$d"
|
||||
}
|
||||
|
||||
vercmp_safe() {
|
||||
# pacman --print returns 0 if equal, 1 if first >, -1 if second >
|
||||
/usr/bin/vercmp "$1" "$2"
|
||||
}
|
||||
|
||||
is_pkg_installed() {
|
||||
pacman -Q "$1" &>/dev/null
|
||||
}
|
||||
|
||||
pkg_local_version() {
|
||||
pacman -Q "$1" 2>/dev/null | awk '{print $2}'
|
||||
}
|
||||
|
||||
# Run command as root via sudo
|
||||
as_root() {
|
||||
if [[ ${EUID:-$(id -u)} -eq 0 ]]; then
|
||||
"$@"
|
||||
else
|
||||
${MIAUR_SUDO:-sudo} ${MIAUR_SUDOFLAGS:-} "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Keep sudo credentials alive in background
|
||||
_sudo_loop_pid=
|
||||
sudoloop_start() {
|
||||
[[ ${MIAUR_SUDOLOOP:-0} -eq 1 ]] || return 0
|
||||
[[ ${EUID:-$(id -u)} -eq 0 ]] && return 0
|
||||
${MIAUR_SUDO:-sudo} -v || return 1
|
||||
(
|
||||
while true; do
|
||||
sleep 60
|
||||
${MIAUR_SUDO:-sudo} -v || exit
|
||||
done
|
||||
) &
|
||||
_sudo_loop_pid=$!
|
||||
}
|
||||
|
||||
sudoloop_stop() {
|
||||
if [[ -n ${_sudo_loop_pid:-} ]]; then
|
||||
kill "$_sudo_loop_pid" 2>/dev/null || true
|
||||
wait "$_sudo_loop_pid" 2>/dev/null || true
|
||||
_sudo_loop_pid=
|
||||
fi
|
||||
}
|
||||
|
||||
trap sudoloop_stop EXIT
|
||||
Reference in New Issue
Block a user