summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-02-17 21:21:55 +0100
committerErich Eckner <git@eckner.net>2019-02-17 21:21:55 +0100
commitca603bc4b69bcdc22c50c5efa09845a48f605a7e (patch)
treeebbb26d1cd11660523bbe432422a050b6e3144ad
parente26d3d47d94f3ab9fa3b94bd3f18dd415906ae5a (diff)
parent205331f5cc20f6d08ef6846721a3c5932a148ed9 (diff)
downloadasp32-ca603bc4b69bcdc22c50c5efa09845a48f605a7e.tar.xz
Merge remote-tracking branch 'upstream/master'
-rw-r--r--remote.inc.sh22
1 files changed, 20 insertions, 2 deletions
diff --git a/remote.inc.sh b/remote.inc.sh
index 226d566..2c39a55 100644
--- a/remote.inc.sh
+++ b/remote.inc.sh
@@ -8,13 +8,31 @@ __remote_refcache_update() {
awk '{ sub(/refs\/heads\//, "", $2); print $2 }' >"$cachefile"
}
-__remote_refcache_get() {
- local remote=$1 ttl=3600 now cachetime cachefile=$ASPCACHE/remote-$remote
+__remote_refcache_is_stale() {
+ local now cachetime cachefile=$1 ttl=3600
printf -v now '%(%s)T' -1
+ # The cache is stale if we've exceeded the TTL.
if ! cachetime=$(stat -c %Y "$cachefile" 2>/dev/null) ||
(( now > (cachetime + ttl) )); then
+ return 0
+ fi
+
+ # We also consider the cache to be stale when this script is newer than the
+ # cache. This allows upgrades to asp to implicitly wipe the cache and not
+ # make any guarantees about the file format.
+ if (( $(stat -c %Y "${BASH_SOURCE[0]}" 2>/dev/null) > cachetime )); then
+ return 0
+ fi
+
+ return 1
+}
+
+__remote_refcache_get() {
+ local remote=$1 cachefile=$ASPCACHE/remote-$remote
+
+ if __remote_refcache_is_stale "$cachefile"; then
__remote_refcache_update "$remote"
fi