55 lines
1.5 KiB
Bash
Executable File
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
|