]> git.ozlabs.org Git - next-scripts/blobdiff - check_commits
update to_build_host a bit
[next-scripts] / check_commits
index 37457e777343deb730620abda3bcf1d56171fac3..9011cb3c11d99db1af6c594d233f31f9b5adc786 100755 (executable)
@@ -1,46 +1,83 @@
 #!/bin/bash
 
 if [ "$#" -lt 1 ]; then
-       printf "Usage: %s <commit range>\n", "$0" 1>&2
+       printf 'Usage: %s <commit range>\n' "$0" 1>&2
        exit 1
 fi
 
 commits=$(git rev-list --no-merges "$@")
 if [ -z "$commits" ]; then
-       printf "No commits\n"
+       printf 'No commits\n'
        exit 0
 fi
 
+"$(realpath "$(dirname "$0")")/check_fixes" "$@"
+
+declare -a author_missing committer_missing
+
+print_commits()
+{
+       if [ "$#" -eq 1 ]; then
+               return
+       fi
+
+       local t="$1"
+
+       shift
+
+       s=
+       is='is'
+       its='its'
+       if [ "$#" -gt 1 ]; then
+               s='s'
+               is='are'
+               its='their'
+       fi
+       printf 'Commit%s\n\n' "$s"
+       git log --no-walk --pretty='format:  %h ("%s")' "$@"
+       printf '\n%s missing a Signed-off-by from %s %s%s.\n\n' \
+               "$is" "$its" "$t" "$s"
+}
+
+check_unexpected_files()
+{
+       local files
+
+       readarray files < <(git diff-tree -r --diff-filter=A --name-only --no-commit-id "$1" '*.rej' '*.orig')
+       if [ "${#files[@]}" -eq 0 ]; then
+               return
+       fi
+
+       s=
+       this='this'
+       if [ "${#files[@]}" -gt 1 ]; then
+               s='s'
+               this='these'
+       fi
+
+       printf 'Commit\n\n'
+       git log --no-walk --pretty='format:  %h ("%s")' "$1"
+       printf '\nadded %s unexpected file%s:\n\n' "$this" "$s"
+       printf '  %s\n' "${files[@]}"
+}
+
 for c in $commits; do
-       ae=$(git log -1 --format='%ae' "$c")
-       aE=$(git log -1 --format='%aE' "$c")
-       an=$(git log -1 --format='%an' "$c")
-       aN=$(git log -1 --format='%aN' "$c")
-       ce=$(git log -1 --format='%ce' "$c")
-       cE=$(git log -1 --format='%cE' "$c")
-       cn=$(git log -1 --format='%cn' "$c")
-       cN=$(git log -1 --format='%cN' "$c")
-       sob=$(git log -1 --format='%b' "$c" | grep -i '^[[:space:]]*Signed-off-by:')
-
-       am=false
-       cm=false
-       grep -i -q "<$ae>" <<<"$sob" ||
-               grep -i -q "<$aE>" <<<"$sob" ||
-               grep -i -q ":[[:space:]]*$an[[:space:]]*<" <<<"$sob" ||
-               grep -i -q ":[[:space:]]*$aN[[:space:]]*<" <<<"$sob" ||
-               am=true
-       grep -i -q "<$ce>" <<<"$sob" ||
-               grep -i -q "<$cE>" <<<"$sob" ||
-               grep -i -q ":[[:space:]]*$cn[[:space:]]*<" <<<"$sob" ||
-               grep -i -q ":[[:space:]]*$cN[[:space:]]*<" <<<"$sob" ||
-               cm=true
-
-       if "$am" || "$cm"; then
-               printf "Commit %s\n" "$c"
-               "$am" && printf "\tauthor SOB missing\n"
-               "$cm" && printf "\tcommitter SOB missing\n"
-               printf "%s %s\n%s\n" "$ae" "$ce" "$sob"
+       ae=$(git log -1 --format='<%ae>%n<%aE>%n %an %n %aN ' "$c" | sort -u)
+       ce=$(git log -1 --format='<%ce>%n<%cE>%n %cn %n %cN ' "$c" | sort -u)
+       sob=$(git log -1 --format='%b' "$c" |
+               sed -En 's/^\s*Signed-off-by:?\s*/ /ip')
+
+       if ! grep -i -F -q "$ae" <<<"$sob"; then
+               author_missing+=("$c")
+       fi
+       if ! grep -i -F -q "$ce" <<<"$sob"; then
+               committer_missing+=("$c")
        fi
+
+       check_unexpected_files "$c"
 done
 
+print_commits 'author' "${author_missing[@]}"
+print_commits 'committer' "${committer_missing[@]}"
+
 exec gitk "$@"