Hi Andreas,

On Tue, 11 Dec 2018 21:47:43 +0100 Andreas Grünbacher 
<andreas.gruenbac...@gmail.com> wrote:
>
> Yep, I've not asked for a way to get the server to reject or warn
> about such pushes without a reason.

Sure, but also here's the script I run (which could be run before
pushing) ...

----------------------------------------------------------------------
#!/bin/bash

if [ "$#" -lt 1 ]; then
        printf "Usage: %s <commit range>\n", "$0" 1>&2
        exit 1
fi

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 -F -q "$ae" <<<"$sob" ||
                am=true
        grep -i -F -q "$ce" <<<"$sob" ||
                cm=true
        "$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
----------------------------------------------------------------------

-- 
Cheers,
Stephen Rothwell

Attachment: pgpJsac_s6Z9e.pgp
Description: OpenPGP digital signature

Reply via email to