1# A flip moves a repo's release trees with its downloads: going public2# extracts them into .forge/store and links www's from there, going private3# into .forge/private/store and links the private root's from there. No4# download is left a link into the other side's store, and gc frees the5# trees the flip left behind there.6. "$(dirname "$0")/../lib.sh"7user dami8repo --private dami/greet9clone dami dami/greet "$T/w/d"10at "$T/w/d" commit "first"11at "$T/w/d" git tag v112ok push_as dami "$T/w/d" origin main13mkdir "$T/f"14printf 'greet 1\n' >"$T/f/greet"15FORGE_USER=dami ok at "$T/w/d" "$FORGE" release publish v1 "$T/f/greet"16tree=$(git --git-dir="$FORGE_ROOT/dami/greet.git" rev-parse 'refs/releases/v1^{tree}')17pub=$FORGE_ROOT/.forge/store/$tree18priv=$FORGE_ROOT/.forge/private/store/$tree19w=$FORGE_WWW/dami/greet/releases/download20p=$FORGE_ROOT/.forge/private/www/dami/greet/releases/download21inode() { ls -i "$1" | awk '{ print $1 }'; }22missing "$pub"23eq "$(inode "$p/v1/greet")" "$(inode "$priv/greet")"2425ok ssh_as dami public dami/greet26missing "$p"27eq "$(inode "$w/v1/greet")" "$(inode "$pub/greet")"28eq "$(inode "$w/latest/greet")" "$(inode "$pub/greet")"29build dami/greet30eq "$(inode "$w/v1/greet")" "$(inode "$pub/greet")"31ok forge gc --age 032has "$T_LOG" "^removed private store $tree "33lacks "$T_LOG" "^removed store "34missing "$priv"35has "$w/v1/greet" 'greet 1'3637ok ssh_as dami private dami/greet38missing "$FORGE_WWW/dami/greet"39eq "$(inode "$p/v1/greet")" "$(inode "$priv/greet")"40eq "$(inode "$p/latest/greet")" "$(inode "$priv/greet")"41build dami/greet42eq "$(inode "$p/v1/greet")" "$(inode "$priv/greet")"43ok forge gc --age 044has "$T_LOG" "^removed store $tree "45lacks "$T_LOG" "^removed private store "46missing "$pub"47has "$p/v1/greet" 'greet 1'