#!/bin/sh die() { printf '%s\n' "$*" >&2 exit 1 } GIT_CMD=$(command -v chroot-git 2>/dev/null) || GIT_CMD=$(command -v git 2>/dev/null) || die "neither chroot-git nor git could be found!" rev_parse() { if [ -n "$1" ]; then "$GIT_CMD" rev-parse --verify "$1" else shift while test "$#" != 0 do "$GIT_CMD" rev-parse --verify "$1" 2>/dev/null && return shift done return 1 fi } base=$(rev_parse "$1" FETCH_HEAD ORIG_HEAD) || die "base commit not found" tip=$(rev_parse "$2" HEAD) || die "tip commit not found" status=0 for cmt in $("$GIT_CMD" rev-list --abbrev-commit $base..$tip) do "$GIT_CMD" cat-file commit "$cmt" | awk -vC="$cmt" ' # skip header /^$/ && !msg { msg = 1; next } !msg { next } # 3: long-line-is-banned-except-footnote-like-this-for-url (NF > 2) && (length > 80) { print C ": long line: " $0; exit 1 } !subject { if (length > 50) { print C ": subject is a bit long" } if (!($0 ~ ":" || $0 ~ "^Take over maintainership " || $0 ~ "^Orphan ")) { print C ": subject does not follow CONTRIBUTING.md guildelines"; exit 1 } # Below check is too noisy? # if (!($0 ~ "^New package:" || $0 ~ ".*: update to")) { # print C ": not new package/update/removal?" # } subject = 1; next } /^$/ { body = 1; next } !body { print C ": second line must be blank"; exit 1 } ' || status=1 done exit $status