Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/bin/sanity-check
diff options
context:
space:
mode:
Diffstat (limited to 'bin/sanity-check')
-rwxr-xr-xbin/sanity-check56
1 files changed, 55 insertions, 1 deletions
diff --git a/bin/sanity-check b/bin/sanity-check
index 631143f..70cccb9 100755
--- a/bin/sanity-check
+++ b/bin/sanity-check
@@ -4,6 +4,13 @@
. "${0%/*}/../conf/default.conf"
+tmp_dir="$(mktemp -d)"
+trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT
+
+if [ $# -eq 0 ]; then
+ set -- mirror
+fi
+
while [ $# -gt 0 ]; do
case "$1" in
@@ -30,10 +37,12 @@ while [ $# -gt 0 ]; do
for repo in ${repos}; do
+ >&2 printf ' checking "%s" ...\n' "${repo}"
+
packages="$(
ls_master_mirror "i686/${repo}" | \
grep '\.pkg\.tar\.xz\(\.sig\)\?$'
- )"
+ )" || true
errors="$(
echo "${packages}" | \
@@ -48,6 +57,51 @@ while [ $# -gt 0 ]; do
exit 1
fi
+ ${master_mirror_command} \
+ "${master_mirror_directory}/i686/${repo}/${repo}.db.tar.gz" \
+ "${master_mirror_directory}/i686/${repo}/${repo}.files.tar.gz" \
+ "${tmp_dir}/"
+
+ errors="$(
+ (
+ tar -tzf "${tmp_dir}/${repo}.db.tar.gz" | \
+ grep '/$' | \
+ sed 's|/$||'
+ echo "${packages}" | \
+ sed 's|-[^-]\+$||' | \
+ sort -u
+ ) | \
+ sort | \
+ uniq -u
+ )"
+ if [ -n "${errors}" ]; then
+ echo "The following packages in ${repo} are missing from the database or vice versa:"
+ echo "${errors}"
+ exit 1
+ fi
+
+ errors="$(
+ (
+ tar -tzf "${tmp_dir}/${repo}.files.tar.gz" | \
+ grep '/$' | \
+ sed 's|/$||'
+ echo "${packages}" | \
+ sed 's|-[^-]\+$||' | \
+ sort -u
+ ) | \
+ sort | \
+ uniq -u
+ )"
+ if [ -n "${errors}" ]; then
+ echo "The following packages in ${repo} are missing from the file-database or vice versa:"
+ echo "${errors}"
+ exit 1
+ fi
+
+ rm -rf --one-file-system "${tmp_dir}/"*
+
+ >&2 printf ' ... "%s" is ok.\n' "${repo}"
+
done
>&2 echo '... passed.'