X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=check_commits;h=9011cb3c11d99db1af6c594d233f31f9b5adc786;hb=HEAD;hp=d82c18aa23786294e538edef10179064f49b75af;hpb=f2f482edbe44b4c57e93a7bbb119c60d0f1a3c71;p=next-scripts diff --git a/check_commits b/check_commits index d82c18a..9011cb3 100755 --- a/check_commits +++ b/check_commits @@ -1,40 +1,83 @@ #!/bin/bash if [ "$#" -lt 1 ]; then - printf "Usage: %s \n", "$0" 1>&2 + printf 'Usage: %s \n' "$0" 1>&2 exit 1 fi -for c in $(git rev-list --no-merges "$@"); 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 '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" +commits=$(git rev-list --no-merges "$@") +if [ -z "$commits" ]; then + 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>%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 -exit 0 +print_commits 'author' "${author_missing[@]}" +print_commits 'committer' "${committer_missing[@]}" + +exec gitk "$@"