#!/bin/bash remote="$1" url="$2" protected_remote='(kernel.org|microchip-at91)' protected_branch='(at91-|rtc-).*' committer='Alexandre Belloni ' if [[ ! $remote =~ $protected_remote ]]; then exit 0 fi # z40=0000000000000000000000000000000000000000 check_update() { remote_ref=$1 local_sha=$2 remote_sha=$3 if [[ ! $remote_ref =~ refs/heads/$protected_branch ]]; then return fi echo Running Signed-off check for $remote $remote_ref if [ "$local_sha" = $z40 ]; then return fi if [ "$remote_sha" = $z40 ]; then BASE=$(git tag -l|grep rc1|sort -V|tail -n 1) range="$BASE..$local_sha" else range="$remote_sha..$local_sha" fi for c in $(git rev-list $range); 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:') COMMITTER="$cN <$cE>" if [ "$COMMITTER" != "$committer" ]; then continue fi 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" exit 1 fi done } while read local_ref local_sha remote_ref remote_sha do check_update $remote_ref $local_sha $remote_sha done exit 0