first upload
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
# AUR upgrade detection and application
|
||||
|
||||
# List foreign packages (AUR candidates): name version
|
||||
foreign_packages() {
|
||||
pacman -Qm
|
||||
}
|
||||
|
||||
# Compare installed foreign pkgs with AUR; print upgradable: name local -> remote
|
||||
aur_outdated() {
|
||||
local -a names=()
|
||||
local -A localver=()
|
||||
local name ver
|
||||
while read -r name ver; do
|
||||
[[ -z $name ]] && continue
|
||||
names+=("$name")
|
||||
localver[$name]=$ver
|
||||
done < <(foreign_packages)
|
||||
|
||||
[[ ${#names[@]} -eq 0 ]] && return 0
|
||||
|
||||
# Batch in chunks of 100
|
||||
local i chunk=100
|
||||
local -a batch=()
|
||||
for ((i = 0; i < ${#names[@]}; i++)); do
|
||||
batch+=("${names[$i]}")
|
||||
if ((${#batch[@]} == chunk || i == ${#names[@]} - 1)); then
|
||||
local json
|
||||
json=$(aur_multiinfo_json "${batch[@]}") || {
|
||||
warn "Failed to query AUR updates"
|
||||
batch=()
|
||||
continue
|
||||
}
|
||||
local line rname rver
|
||||
while IFS= read -r line; do
|
||||
rname=${line%%|*}
|
||||
rver=${line#*|}
|
||||
[[ -z $rname ]] && continue
|
||||
local lv=${localver[$rname]:-}
|
||||
[[ -z $lv ]] && continue
|
||||
if [[ $(vercmp_safe "$rver" "$lv") -gt 0 ]]; then
|
||||
printf '%s %s -> %s\n' "$rname" "$lv" "$rver"
|
||||
fi
|
||||
done < <(jq -r '.[] | "\(.Name)|\(.Version)"' <<<"$json")
|
||||
batch=()
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Print outdated like pacman -Qu
|
||||
cmd_query_aur_upgrades() {
|
||||
local name old _arrow new
|
||||
while read -r name old _arrow new; do
|
||||
[[ -z $name ]] && continue
|
||||
printf '%s %s -> %s\n' "$name" "$old" "$new"
|
||||
done < <(aur_outdated)
|
||||
return 0
|
||||
}
|
||||
|
||||
# Upgrade all outdated AUR packages
|
||||
cmd_upgrade_aur() {
|
||||
local -a pkgs=()
|
||||
local name old arrow new
|
||||
while read -r name old arrow new; do
|
||||
[[ -z $name ]] && continue
|
||||
pkgs+=("$name")
|
||||
msg2 "$name ${old} -> ${new}"
|
||||
done < <(aur_outdated)
|
||||
|
||||
if [[ ${#pkgs[@]} -eq 0 ]]; then
|
||||
msg "No AUR package upgrades are available"
|
||||
return 0
|
||||
fi
|
||||
msg "Upgrading ${#pkgs[@]} AUR package(s)"
|
||||
install_aur_packages "${pkgs[@]}"
|
||||
}
|
||||
|
||||
# Full -Syu: refresh + repo upgrade + AUR upgrade
|
||||
cmd_upgrade_all() {
|
||||
local refresh=${1:-0}
|
||||
sudoloop_start
|
||||
local -a pac_args=()
|
||||
[[ $refresh -eq 1 ]] && pac_args+=(-y)
|
||||
pac_args+=(-Su)
|
||||
|
||||
msg "Synchronizing databases and upgrading repository packages..."
|
||||
# Use -Syu style via pacman
|
||||
if [[ $refresh -eq 1 ]]; then
|
||||
as_root ${MIAUR_PACMAN} -Syu --noconfirm || die "repository upgrade failed"
|
||||
else
|
||||
as_root ${MIAUR_PACMAN} -Su --noconfirm || die "repository upgrade failed"
|
||||
fi
|
||||
|
||||
msg "Checking for AUR updates..."
|
||||
cmd_upgrade_aur
|
||||
sudoloop_stop
|
||||
}
|
||||
Reference in New Issue
Block a user