--- /dev/null
+#!/bin/bash
+
+if [ "$#" -lt 1 ]; then
+ printf "Usage: %s <commit range>\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"
+ fi
+done
+
+exit 0