From 22f079869b7586bcef4b77b6601376be2bd1e61d Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Sat, 18 Nov 2017 08:14:00 -0500 Subject: Avoid corrupting caches when network is unavailable This removes the use of a tempfile entirely, and only updates the cache when `git ls-remote` succeeds. Based on a PR by polygamma: https://github.com/falconindy/asp/pull/20 --- remote.inc.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/remote.inc.sh b/remote.inc.sh index 01031e0..226d566 100644 --- a/remote.inc.sh +++ b/remote.inc.sh @@ -1,12 +1,11 @@ __remote_refcache_update() { - local remote=$1 cachefile=$ASPCACHE/remote-$remote + local remote=$1 cachefile=$ASPCACHE/remote-$remote refs - # shellcheck disable=SC2064 - trap "rm -f '$cachefile~'" RETURN + refs=$(git ls-remote "$remote" 'refs/heads/packages/*') || + log_fatal "failed to update remote $remote" - git ls-remote "$remote" 'refs/heads/packages/*' | - awk '{ sub(/refs\/heads\//, "", $2); print $2 }' >"$cachefile~" && - mv "$cachefile"{~,} + printf '%s' "$refs" | + awk '{ sub(/refs\/heads\//, "", $2); print $2 }' >"$cachefile" } __remote_refcache_get() { -- cgit v1.2.3-70-g09d2