#!/bin/bash default_branch="$(git rev-parse --abbrev-ref HEAD)" default_branch_path="$(git rev-parse --symbolic-full-name HEAD)" config="$(dirname "$(readlink -f "$0")")"/sh.conf [ -r "$config" ] && source "$config" reponame="$(readlink -f .)" reponame="${reponame%/.git}" reponame="${reponame#/home/}" FORMAT="%C(auto)%h by %an (%ah: %s) sig: %G? %GS 0x%GK https://cgit.space/$reponame/commit/?id=%h" NC=( nc -q 0 "${to_host:-127.0.0.1}" "${to_port:-1337}" ) ref="$1" old="$2" new="$3" allowForcePush="$(git config --type=bool hooks.allowForcePush)" protectedRefs="$(git config --default "$default_branch_path" hooks.protectedRefs)" commits="" forced="" if [ "$old" = "0000000000000000000000000000000000000000" ]; then # new branch commits="created with $(git describe --always "$new")" elif [ "$new" = "0000000000000000000000000000000000000000" ]; then # deleted branch commits="deleted from $(git describe --always "$old")" 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 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 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