#!/bin/sh # SPDX-License-Identifier: GPL-2.0+ # # git-request-pull wrapper with sanity checks # baserev= headrev= parse_options() { # The code below if borrowed from git-request-pull # Skip all options while [[ $# != 0 ]] ; do case "$1" in -p) ;; --) shift break ;; -*) return ;; *) break ;; esac shift done local base=$1 local head= baserev=$(git rev-parse --verify --quiet "$base"^0) if [[ -z "$baserev" ]] ; then return fi local=${3%:*} local=${local:-HEAD} head=$(git symbolic-ref -q "$local") head=${head:-$(git show-ref --heads --tags "$local" | cut -d' ' -f2)} head=${head:-$(git rev-parse --quiet --verify "$local")} if [[ -z "$head" ]] ; then return fi headrev=$(git rev-parse --verify --quiet "$head"^0) } check_commits() { if [[ -z "$baserev" || -z "$headrev" ]] ; then # git request-pull will catch this issue return fi local author local commit local committer local errors=0 local sob for commit in $(git rev-list ^$baserev $headrev) ; do local author=$(git show --pretty='format:%an <%ae>' -s $commit) local committer=$(git show --pretty='format:%cn <%ce>' -s $commit) local summary=$(git show --pretty='format:%h ("%s")' -s $commit) git show -s $commit | grep -Fqx " Signed-off-by: $author" || { echo "Commit $summary is not signed off by author" errors=$((errors+1)) } git show -s $commit | grep -Fqx " Signed-off-by: $committer" || { echo "Commit $summary is not signed off by committer" errors=$((errors+1)) } done if [[ $errors != 0 ]] ; then echo "$errors errors found, please fix" exit 1 fi } parse_options $* check_commits git request-pull $*