1# forge gc keeps the private store tree of a private repo's release, whose2# files are hard links in the private root, and drops the downloads of a3# release whose ref went behind the hooks' back there as in www, freeing4# its tree.5. "$(dirname "$0")/../lib.sh"6user dami7repo --private dami/secret8clone dami dami/secret "$T/w/d"9mkdir "$T/f"10export FORGE_USER=dami11g=$FORGE_ROOT/dami/secret.git12for v in 1 2; do13 tick 360014 at "$T/w/d" commit "v$v"15 at "$T/w/d" git tag "v$v"16 ok push_as dami "$T/w/d" origin main17 printf 'secret %s\n' "$v" >"$T/f/tool"18 ok at "$T/w/d" "$FORGE" release publish "v$v" "$T/f/tool"19 eval "tree$v=$(git --git-dir="$g" rev-parse "refs/releases/v$v^{tree}")"20done21unset FORGE_USER22build23store=$FORGE_ROOT/.forge/private/store24dl=$FORGE_ROOT/.forge/private/www/dami/secret/releases/download25exists "$store/$tree1/tool"26exists "$store/$tree2/tool"27has "$dl/latest/tool" 'secret 2'2829ok forge gc --age 030lacks "$T_LOG" 'removed (release|store|private store)'31exists "$store/$tree1/tool"32exists "$store/$tree2/tool"3334git --git-dir="$g" update-ref -d refs/releases/v235ok forge gc --age 036has "$T_LOG" '^removed release dami/secret v2$'37has "$T_LOG" "^removed private store $tree2 "38lacks "$T_LOG" "$tree1"39missing "$dl/v2"40has "$dl/v1/tool" 'secret 1'41has "$dl/latest/tool" 'secret 1'42missing "$FORGE_WWW/dami/secret"