util/git-hooks: Check for Signed-off-by line

Enforce the DCO. The logic comes from coreboot's commit-msg hook,
and I've added a pointer to flashrom's development guidelines.

Change-Id: Iea49a06c2d4824be073eff98c8aae1cbc5b145e4
Signed-off-by: David Hendricks <david.hendricks@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/35295
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
diff --git a/util/git-hooks/commit-msg b/util/git-hooks/commit-msg
index 346c08f..d43eb45 100755
--- a/util/git-hooks/commit-msg
+++ b/util/git-hooks/commit-msg
@@ -28,6 +28,8 @@
 CHANGE_ID_AFTER="Bug|Depends-On|Issue|Test|Feature|Fixes|Fixed|Staging-ID"
 MSG="$1"
 
+DEV_GUIDELINES_URL="https://www.flashrom.org/Development_Guidelines"
+
 # Check for, and add if missing, a unique Change-Id
 #
 add_ChangeId() {
@@ -192,6 +194,14 @@
 	git hash-object -t commit --stdin
 }
 
+test_signoff() {
+	if ! grep -qi '^[[:space:]]*\+Signed-off-by:' "$MSG"; then
+		printf "\nError: No Signed-off-by line in the commit message.\n"
+		printf "See: ${DEV_GUIDELINES_URL}\n"
+		exit 1
+	fi
+}
+
 # Test for duplicate signoffs/acks
 test_duplicate_signoffs_acks() {
 	test "" = "$(grep -i '^(Signed-off-by|Acked-by): ' "$MSG" |
@@ -202,6 +212,7 @@
 }
 
 main() {
+	test_signoff
 	test_duplicate_signoffs_acks
 	add_ChangeId
 }