aboutsummaryrefslogtreecommitdiff
path: root/maint/thanks
blob: 7e87d6a96d5e0b1f2b32bb62cf2d1b81c8a1d969 (plain)
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
#!/usr/bin/env bash
set -euo pipefail

if [ -z "${1-}" ]; then
	echo "Usage: $0 [revision]"
	echo "Script will print thanks for all contributors since [revision]."
	exit 1
fi

# from https://stackoverflow.com/a/17841619/4739163
function join_by { local d=${1-} f=${2-}; if shift 2; then printf %s "$f" "${@/#/$d}"; fi; }

TEMPDIR=$(mktemp -d)
TO_EXCLUDE="$(dirname "$0")/exclude_contributors.txt"
LAST_REV=$1

WE_CREDIT=(
    # Name of the author.
    %an
    # Name of the committer.
    %cn
    # Anybody in Reported-by. (These are case-insensitive, don't worry.)
    "%(trailers:valueonly=true,key=Reported-by)"
    # Anybody in Co-Authored-By.
    "%(trailers:valueonly=true,key=Co-Authored-by)"
    # Anybody in Thanks.
    "%(trailers:valueonly=true,key=Thanks)"
    # Anybody in Suggested-by
    "%(trailers:valueonly=true,key=Suggested-by)"
)
PRETTY=$(join_by "%n" "${WE_CREDIT[@]}")

trap 'rm -rf "$TEMPDIR"' 0

echo "[*] Finding contributors since $LAST_REV..."
git log --pretty="$PRETTY" HEAD "^$LAST_REV" |
    # Remove empty lines
    grep . |
    # Remove email addrs
    sed 's/ *<[^>]*>$//' |
    sort |
    uniq > "$TEMPDIR/contributors.txt"
echo "[*] Found $(wc -l < "$TEMPDIR/contributors.txt") contributors!"

echo "[*] Removing contributors listed in $TO_EXCLUDE..."
comm -13 "$TO_EXCLUDE" "$TEMPDIR/contributors.txt" |
    sed 's/^[[:space:]]*\|[[:space:]]*$//g' > "$TEMPDIR/final.txt"
echo "[*] Ended up with $(wc -l < "$TEMPDIR/final.txt") contributors remaining."

readarray -t CONTRIBUTORS < "$TEMPDIR/final.txt"

OUTPUT=$(join_by ", " "${CONTRIBUTORS[@]}")

echo "Contributors: $OUTPUT"