aboutsummaryrefslogtreecommitdiffstats
path: root/.extras/test-build
diff options
context:
space:
mode:
Diffstat (limited to '.extras/test-build')
-rwxr-xr-x.extras/test-build22
1 files changed, 19 insertions, 3 deletions
diff --git a/.extras/test-build b/.extras/test-build
index 26bf2a4..6c2d580 100755
--- a/.extras/test-build
+++ b/.extras/test-build
@@ -425,16 +425,32 @@ cache_label() {
fi
}
-# Compute CACHE_ROOT from the image's digest. Falls back to the tag if the
-# digest cannot be read (still isolates per image reference).
+# Compute CACHE_ROOT from the image's digest, namespaced by variant. Falls back
+# to the tag if the digest cannot be read (still isolates per image reference).
+# The dir is "<variant>-<digest>", so an image rebuild changes the digest and
+# self-invalidates the cache (deps built against the old base are never reused).
+#
+# Prune stale digests of THIS variant on the way in: a base update leaves the
+# old <variant>-<olddigest> dir orphaned, so drop it. Scoped to the variant so a
+# --current run does not wipe the 15.0 cache (both live caches survive, and
+# testing both trees back-to-back still reuses built deps).
resolve_cache_root() {
[[ -z "$PKG_CACHE" ]] && { CACHE_ROOT=""; return; }
local digest
digest="$(docker image inspect --format '{{index .Id}}' "$ACTIVE_IMAGE" 2>/dev/null)"
[[ -z "$digest" ]] && digest="tag-${ACTIVE_IMAGE//[^a-zA-Z0-9._-]/_}"
digest="${digest//[^a-zA-Z0-9._-]/_}"
- CACHE_ROOT="$PKG_CACHE/$digest"
+ local name="${VERSION_ID}-${digest}"
+ CACHE_ROOT="$PKG_CACHE/$name"
mkdir -p "$CACHE_ROOT"
+
+ # drop superseded caches for this variant only
+ local d
+ for d in "$PKG_CACHE/${VERSION_ID}-"*; do
+ [[ -d "$d" ]] || continue
+ [[ "$(basename "$d")" == "$name" ]] && continue
+ rm -rf "$d"
+ done
}
# Does SlackBuild dir $1 directly require any prog in the dead list (nameref $2)?