clone

a personal forge on plain git: static pages, stacked-diff reviews, signed local ci, repo sites and releases

main
forge / test / scenarios / release-private-store-gc.sh
release-private-store-gc.sh 2.6K
1# forge gc frees unused trees in both stores: .forge/store keeps what sites2# link to and public repos' releases name, .forge/private/store what private3# repos' releases name. Fresh trees wait out the grace (--age), --dry-run4# only lists, and a removed private repo's trees go with it while its5# trash is purged on time.6. "$(dirname "$0")/../lib.sh"7user dami8repo dami/open9repo --private dami/secret10mkdir "$T/f"11export FORGE_USER=dami12for r in open secret; do13 clone dami "dami/$r" "$T/w/$r"14 for v in 1 2; do15 tick 360016 at "$T/w/$r" commit "v$v"17 at "$T/w/$r" git tag "v$v"18 ok push_as dami "$T/w/$r" origin main19 printf '%s %s\n' "$r" "$v" >"$T/f/tool"20 ok at "$T/w/$r" "$FORGE" release publish "v$v" "$T/f/tool"21 eval "${r}$v=$(git --git-dir="$FORGE_ROOT/dami/$r.git" rev-parse "refs/releases/v$v^{tree}")"22 done23done24ok push_as dami "$T/w/open" origin "$(site_commit "$T/w/open" docs):refs/sites/docs"25unset FORGE_USER26site=$(basename "$(readlink "$FORGE_WWW/sites/dami/open/docs")")27store=$FORGE_ROOT/.forge/store28priv=$FORGE_ROOT/.forge/private/store2930# Everything is in use.31ok forge gc --age 032lacks "$T_LOG" 'removed (release|store|private store)'33for t in "$open1" "$open2" "$site"; do exists "$store/$t"; done34for t in "$secret1" "$secret2"; do exists "$priv/$t"; done3536# Dead trees in each: kept while fresh, listed by --dry-run, then freed.37git --git-dir="$FORGE_ROOT/dami/open.git" update-ref -d refs/releases/v138git --git-dir="$FORGE_ROOT/dami/secret.git" update-ref -d refs/releases/v139ok forge gc40lacks "$T_LOG" 'removed (store|private store)'41exists "$store/$open1"42exists "$priv/$secret1"43ok forge gc --age 0 --dry-run44has "$T_LOG" "^would remove store $open1 "45has "$T_LOG" "^would remove private store $secret1 "46exists "$store/$open1"47exists "$priv/$secret1"48ok forge gc --age 049has "$T_LOG" "^removed store $open1 "50has "$T_LOG" "^removed private store $secret1 "51has "$T_LOG" '^gc: removed 2 from the stores'52missing "$store/$open1"53missing "$priv/$secret1"54for t in "$open2" "$site"; do exists "$store/$t"; done55exists "$priv/$secret2"5657# A removed private repo: its downloads go at once, its tree at gc, its58# trash after FORGE_TRASH_DAYS.59ok forge repo rm dami/secret60missing "$FORGE_ROOT/.forge/private/www/dami/secret"61ok forge gc --age 062has "$T_LOG" "^removed private store $secret2 "63lacks "$T_LOG" '^removed trash'64missing "$priv/$secret2"65ok env FORGE_TRASH_DAYS=0 "$FORGE" gc --age 066has "$T_LOG" '^removed trash dami/secret\.git\.'67eq "$(find "$FORGE_ROOT/.forge/trash" -mindepth 2 | wc -l | tr -d ' ')" 068for t in "$open2" "$site"; do exists "$store/$t"; done