]> git.ozlabs.org Git - next-scripts/blob - check_commits
update to_build_host a bit
[next-scripts] / check_commits
1 #!/bin/bash
2
3 if [ "$#" -lt 1 ]; then
4         printf 'Usage: %s <commit range>\n' "$0" 1>&2
5         exit 1
6 fi
7
8 commits=$(git rev-list --no-merges "$@")
9 if [ -z "$commits" ]; then
10         printf 'No commits\n'
11         exit 0
12 fi
13
14 "$(realpath "$(dirname "$0")")/check_fixes" "$@"
15
16 declare -a author_missing committer_missing
17
18 print_commits()
19 {
20         if [ "$#" -eq 1 ]; then
21                 return
22         fi
23
24         local t="$1"
25
26         shift
27
28         s=
29         is='is'
30         its='its'
31         if [ "$#" -gt 1 ]; then
32                 s='s'
33                 is='are'
34                 its='their'
35         fi
36         printf 'Commit%s\n\n' "$s"
37         git log --no-walk --pretty='format:  %h ("%s")' "$@"
38         printf '\n%s missing a Signed-off-by from %s %s%s.\n\n' \
39                 "$is" "$its" "$t" "$s"
40 }
41
42 check_unexpected_files()
43 {
44         local files
45
46         readarray files < <(git diff-tree -r --diff-filter=A --name-only --no-commit-id "$1" '*.rej' '*.orig')
47         if [ "${#files[@]}" -eq 0 ]; then
48                 return
49         fi
50
51         s=
52         this='this'
53         if [ "${#files[@]}" -gt 1 ]; then
54                 s='s'
55                 this='these'
56         fi
57
58         printf 'Commit\n\n'
59         git log --no-walk --pretty='format:  %h ("%s")' "$1"
60         printf '\nadded %s unexpected file%s:\n\n' "$this" "$s"
61         printf '  %s\n' "${files[@]}"
62 }
63
64 for c in $commits; do
65         ae=$(git log -1 --format='<%ae>%n<%aE>%n %an %n %aN ' "$c" | sort -u)
66         ce=$(git log -1 --format='<%ce>%n<%cE>%n %cn %n %cN ' "$c" | sort -u)
67         sob=$(git log -1 --format='%b' "$c" |
68                 sed -En 's/^\s*Signed-off-by:?\s*/ /ip')
69
70         if ! grep -i -F -q "$ae" <<<"$sob"; then
71                 author_missing+=("$c")
72         fi
73         if ! grep -i -F -q "$ce" <<<"$sob"; then
74                 committer_missing+=("$c")
75         fi
76
77         check_unexpected_files "$c"
78 done
79
80 print_commits 'author' "${author_missing[@]}"
81 print_commits 'committer' "${committer_missing[@]}"
82
83 exec gitk "$@"