clone

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

main
forge / test / scenarios / private-push.sh
private-push.sh 1.8K
1# Pushing to a private repo: someone who can't read it gets what a push to a2# missing repo gets, and pre-receive turns them away too if anything lets3# them that far. Readers push review branches like anyone on a public repo.4. "$(dirname "$0")/../lib.sh"5user dami6user ana7user cat8repo --private dami/secret9clone dami dami/secret "$T/w/dami"10at "$T/w/dami" commit "first"11ok push_as dami "$T/w/dami" origin main12ok ssh_as dami readers dami/secret add ana1314mkdir "$T/w/cat" && at "$T/w/cat" git init -q15at "$T/w/cat" commit "cat's"16fails push_ssh cat "$T/w/cat" "$FORGE_SSH:dami/secret.git" HEAD:cat/x17denied=$(output)18aside dami/secret19fails push_ssh cat "$T/w/cat" "$FORGE_SSH:dami/secret.git" HEAD:cat/x20back dami/secret21eq "$denied" "$(output)"22has "$T_LOG" 'no repo dami/secret; only dami can create repos under dami/'23for cmd in "git-receive-pack 'dami/secret.git'" "git receive-pack 'dami/../dami/secret'" "git-receive-pack '$FORGE_ROOT/dami/secret.git'" \24 "git-receive-pack 'cat/../dami/secret.git'"; do25 fails ssh_as cat "$cmd" </dev/null26 denied=$(output)27 aside dami/secret28 fails ssh_as cat "$cmd" </dev/null29 back dami/secret30 eq "$denied" "$(output)"31done32missing "$FORGE_ROOT/cat/x.git"3334# Past forge shell (here the file transport), pre-receive says no.35fails_with "no repo dami/secret" push_as cat "$T/w/cat" "$FORGE_ROOT/dami/secret.git" HEAD:refs/heads/cat/x36fails git --git-dir="$FORGE_ROOT/dami/secret.git" rev-parse -q --verify refs/heads/cat/x3738# A reader pushes a review branch under their name, not main.39ok clone_ssh ana dami/secret "$T/w/ana"40at "$T/w/ana" commit "ana's idea"41ok push_ssh ana "$T/w/ana" origin HEAD:ana/idea42has "$FORGE_ROOT/dami/secret.git/forge/reviews/1" '^branch ana/idea$'43has "$FORGE_ROOT/.forge/events.jsonl" '"type":"push","user":"ana".*"private":true}$'44fails_with "only dami can push main" push_ssh ana "$T/w/ana" origin HEAD:main