perf(pkgbuild-sync): batch installed package checks

This commit is contained in:
2026-06-15 14:34:43 +02:00
parent ab9334926a
commit 8272bb2753
+15 -6
View File
@@ -101,11 +101,14 @@ update_srcinfo() {
all_packages_current() {
local expected_version
local installed_packages
local -A installed_versions=()
local installed_version
local srcinfo
local pkg_names
local pkg_name
local epoch
local line
local missing=0
local pkgrel
local pkgver
@@ -148,15 +151,23 @@ all_packages_current() {
return 2
fi
mapfile -t installed_packages < <(
pacman -Q "${pkg_names[@]}" 2>/dev/null || true
)
for line in "${installed_packages[@]}"; do
pkg_name="${line%% *}"
installed_versions["$pkg_name"]="${line#"$pkg_name "}"
done
for pkg_name in "${pkg_names[@]}"; do
if ! installed_version="$(pacman -Q "$pkg_name" 2>/dev/null)"; then
installed_version="${installed_versions[$pkg_name]-}"
if [[ -z "$installed_version" ]]; then
printf 'not installed: %s\n' "$pkg_name"
missing=1
continue
fi
installed_version="${installed_version#"$pkg_name "}"
if [[ "$installed_version" != "$expected_version" ]]; then
printf 'version mismatch: %s %s installed, %s expected\n' \
"$pkg_name" "$installed_version" "$expected_version"
@@ -249,7 +260,6 @@ process_package() {
main() {
local failures=0
local dir
local found=0
local package_count=0
parse_args "$@"
@@ -260,7 +270,6 @@ main() {
for dir in "$root"/*; do
[[ -f "${dir}/PKGBUILD" ]] || continue
found=1
if ((package_count > 0)); then
printf '\n'
fi
@@ -271,7 +280,7 @@ main() {
fi
done
((found)) || die "no PKGBUILD directories found in $root"
((package_count > 0)) || die "no PKGBUILD directories found in $root"
if ((failures)); then
printf '\n%d package(s) failed\n' "$failures" >&2