Files
blomarchy/bin/blob-packages-check
T

55 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# blob:summary=Verify every package list entry resolves, ignoring extra repositories
# blob:hidden=true
set -e
bin_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
repo_dir="$(dirname "$bin_dir")"
official_list="$repo_dir/packages/blob.packages"
aur_list="$repo_dir/packages/blob-aur.packages"
failures=0
entries() {
grep -vE '^[[:space:]]*#|^[[:space:]]*$' "$1" 2>/dev/null || true
}
# pacman -Si and yay -Si both search every configured repository, so a package
# that exists only in a third-party repo passes them and then fails on a machine
# that does not have that repo. These checks name the repositories explicitly.
official_names="$(pacman -Sl core extra multilib 2>/dev/null | awk '{print $2}' | sort -u)"
echo "Checking $official_list against core, extra, multilib"
for entry in $(entries "$official_list"); do
name=${entry%%|*}
if ! printf '%s\n' "$official_names" | grep -qx "$name"; then
echo " NOT IN OFFICIAL REPOS: $name"
failures=$((failures + 1))
fi
done
echo "Checking $aur_list against the AUR"
for entry in $(entries "$aur_list"); do
name=${entry%%|*}
if printf '%s\n' "$official_names" | grep -qx "$name"; then
echo " IN OFFICIAL REPOS, MOVE IT: $name"
failures=$((failures + 1))
continue
fi
if ! yay -Ssa "$name" 2>/dev/null | grep -qE "^aur/$name "; then
echo " NOT IN AUR: $name"
failures=$((failures + 1))
fi
done
echo
if (( failures == 0 )); then
echo "All entries resolve."
exit 0
fi
echo "$failures problem(s)."
exit 1