#!/bin/bash default_branch="$(git rev-parse --abbrev-ref HEAD)" default_branch_path="$(git rev-parse --symbolic-full-name HEAD)" suppress="$(git config --get --type bool --default=false hooks.suppressNotify)" allowForcePush="$(git config --type=bool hooks.allowForcePush)" protectedRefs="$(git config --default "$default_branch_path" hooks.protectedRefs)" addlNotify="$(git config get --value '^([a-zA-Z0-9_.-]+|[0-9.]+|[0-9a-fA-F:.]+):[0-9]{1,5}$' hooks.notify)" 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" commits_per_ref="${commits_per_ref:-5}" lines_total=0 max_num_lines="${max_num_lines:-10}" #cat|notify while read old new ref; do wait commits="" forced="" lines_ref=0 if ((16#$old == 0)); then # new branch commits="created with $(git describe --always "$new")" elif ((16#$new == 0)); 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 if [ "$suppress" != "true" ]; then echo "[$reponame] $ref $commits by $USER" | notify if ((16#$old == 0)); then git log -n $((commits_per_ref+1)) --no-show-signature --no-patch --pretty="tformat:$FORMAT" "$new" elif ((16#$new == 0)); then : else git log -n $((commits_per_ref+1)) --no-show-signature --pretty="tformat:$FORMAT" "$old".."$new" fi | while read line; do ((lines_ref++)) if [ "$lines_ref" -gt "${commits_per_ref}" ]; then echo "(... more commits)" break else printf '%s\n' "$line" fi done fi done | while read line; do ((lines_total++)) if [ "$lines_total" -gt "${max_num_lines}" ]; then echo "(...more stuff)" break fi printf '%s\n' "$line" done | notify