From 39eab667a29c618436d7338265aeec4891ecfcd5 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 8 Jul 2016 23:38:09 -0400 Subject: check that all cached packages exist before trying to extract anything This might be a slight slowdown because of reduced parallelism, but it makes the user experience nicer, improved diagnostics, and avoids a common case where it runs for a long time before failing (fail early). --- pristine-etc-keeper | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/pristine-etc-keeper b/pristine-etc-keeper index a6a395c..a8a3954 100755 --- a/pristine-etc-keeper +++ b/pristine-etc-keeper @@ -26,10 +26,24 @@ commit() ( rm -rf etc/ + local err=false + local files=() while IFS=' ' read -r pkgname pkgver arch; do - file=("/var/cache/pacman/pkg/$pkgname-$pkgver-$arch".pkg.tar.*) - bsdtar xpfv "$file" etc + local file=("/var/cache/pacman/pkg/$pkgname-$pkgver-$arch".pkg.tar.*) + if ! test -f "$file"; then + printf "ERROR: no cached package for %s %s %s\n" "$pkgname" "$pkgver" "$arch" + err=true + fi + files+=("$file") done < <(join <(pacman-etc-name-ver|sort) <(pacman-all-name-arch|sort)) + if $err; then + return 1 + fi + local file + for file in "${files[@]}"; do + printf " -> %s\n" "$file" + bsdtar xpvf "$file" etc + done touch etc/.gitignore ln -sr etc.git etc/.git @@ -68,14 +82,14 @@ main() { while true; do lock if ! [[ -f /var/lib/pristine-etc/spool ]]; then - exit 0 + return 0 fi msg="$(cat /var/lib/pristine-etc/spool)" rm -f /var/lib/pristine-etc/spool unlock - commit "$msg" - pull + commit "$msg" || return $? + pull || return $? done } -- cgit v1.2.3