X-Git-Url: https://jfr.im/git/hooks.git/blobdiff_plain/d3a519c97b595bf0632e6a34238f791373b63042..refs/heads/main:/master/update diff --git a/master/update b/master/update index 4ef25a1..591aef7 100755 --- a/master/update +++ b/master/update @@ -1,14 +1,21 @@ -#!/bin/sh +#!/bin/bash reponame="$(basename "$(readlink -f .)")" FORMAT="%C(auto)%h by %an (%ah: %s) sig: %G? %GS 0x%GK https://jfr.im/git/$reponame/commitdiff/%h" -H2I="https://h2i:ef199c443ca3f1f49709dbe79c3758273658fb7cfbb2ff88ab97ef9aedd6bb30@chat.2948.ca/h2i/null" +#H2I="https://h2i:ef199c443ca3f1f49709dbe79c3758273658fb7cfbb2ff88ab97ef9aedd6bb30@chat.2948.ca/h2i/null" +NC=( nc -q 0 10.0.0.2 13336 ) ref="$1" old="$2" new="$3" +allowForcePush="$(git config --type=bool hooks.allowForcePush)" +protectedRefs="$(git config --default refs/heads/master hooks.protectedRefs)" + +commits="" +forced="" + if [ "$old" = "0000000000000000000000000000000000000000" ]; then # new branch commits="created with $(git describe --always "$new")" elif [ "$new" = "0000000000000000000000000000000000000000" ]; then # deleted branch @@ -17,16 +24,27 @@ elif [ "$old" = "$(git merge-base "$old" "$new")" ]; then # fast-forward update commits="updated from $(git describe --always "$old") -> $(git describe --always "$new")" elif [ "$new" = "$(git merge-base "$old" "$new")" ]; then # rollback commits="!! rolled back to $(git describe --always "$new") erasing history through $(git describe --always "$old")" + forced="true" else # commit --amend, rebase, or similar commits="!! rewrote history from $(git describe --always "$(git merge-base "$old" "$new")") -> $(git describe --always "$new") erasing history through $(git describe --always "$old")" + forced="true" fi -curl -sS -d "[$reponame] $ref $commits" "$H2I" >/dev/null +#curl -sS -d "[$reponame] $ref $commits" "$H2I" >/dev/null +echo "[$reponame] $ref $commits" | "${NC[@]}" >/dev/null if [ "$old" = "0000000000000000000000000000000000000000" ]; then git show --no-show-signature --no-patch --pretty="tformat:$FORMAT" "$new" else git log --no-show-signature --pretty="tformat:$FORMAT" "$old".."$new" fi | while read line; do - curl -sS -d "$line" "$H2I" >/dev/null + : #curl -sS -d "$line" "$H2I" >/dev/null + echo "$line" | "${NC[@]}" >/dev/null done + +if [[ $forced == "true" && $allowForcePush != "true" && $ref =~ $protectedRefs ]]; then + echo "(BLOCKED PUSH, 'git config hooks.allowForcePush true' on server to allow)" | "${NC[@]}" >/dev/null + exit 1 +fi + +exit 0