53 lines
1.3 KiB
Bash
Executable File
53 lines
1.3 KiB
Bash
Executable File
#!/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
|