blob: e8752f18ab012515f831439c26e5c2d188dde9e1 (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#!/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
|