X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=check_commits;h=5d7d0602ed57d1a74f6dfcfca1d7ed23f039eb6d;hb=cbf20b0e01794df9d59f05b38319988f7cf74041;hp=6fc5265420a69a390006122728a1dc8b46950de0;hpb=2c472e3c10825b42c3c190110a37ca6dd01b2b64;p=next-scripts diff --git a/check_commits b/check_commits index 6fc5265..5d7d060 100755 --- a/check_commits +++ b/check_commits @@ -5,36 +5,56 @@ if [ "$#" -lt 1 ]; then 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 '^[[:space:]]*Signed-off-by:') +commits=$(git rev-list --no-merges "$@") +if [ -z "$commits" ]; then + printf "No commits\n" + exit 0 +fi + +author_missing= +committer_missing= + +print_commits() +{ + local t="$1" + + shift + + s= + is='is' + its='its' + [ "$#" -gt 1 ] && { + s='s' + is='are' + its='their' + } + 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" "$is" "$its" "$t" "$s" + printf "\n" +} + +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) + msg=$(git log -1 --format='%b' "$c") + sob=$(echo "$msg" | sed -En 's/^\s*Signed-off-by:?\s*/ /ip') 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" || + grep -i -F -q "$ae" <<<"$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" || + grep -i -F -q "$ce" <<<"$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" - fi + "$am" && author_missing+=" $c" + "$cm" && committer_missing+=" $c" done +if [ "$author_missing" ]; then + print_commits "author" $author_missing +fi +if [ "$committer_missing" ]; then + print_commits "committer" $committer_missing +fi + exec gitk "$@"