|
|
@@ -0,0 +1,30 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+set -euo pipefail
|
|
|
+
|
|
|
+# Heredocs are banned from the hook delivery chain: bash >= 5.1 delivers
|
|
|
+# them through a pre-fork pipe write that deadlocks on macOS under pipe
|
|
|
+# pressure (issue #571; the #571 class). This fence fails the moment one
|
|
|
+# returns. The operator is spelled out of a variable so this file does not
|
|
|
+# trip its own check.
|
|
|
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
+
|
|
|
+OP='<''<'
|
|
|
+FAILURES=0
|
|
|
+for f in "$REPO_ROOT"/hooks/*; do
|
|
|
+ case "$f" in *.json) continue;; esac
|
|
|
+ [ -f "$f" ] || continue
|
|
|
+ if hits="$(grep -nE "$OP" "$f")"; then
|
|
|
+ echo " [FAIL] heredoc operator in ${f#"$REPO_ROOT"/}:"
|
|
|
+ printf '%s\n' "$hits" | sed 's/^/ /'
|
|
|
+ FAILURES=$((FAILURES + 1))
|
|
|
+ else
|
|
|
+ echo " [PASS] ${f#"$REPO_ROOT"/} is heredoc-free"
|
|
|
+ fi
|
|
|
+done
|
|
|
+
|
|
|
+if [ "$FAILURES" -gt 0 ]; then
|
|
|
+ echo "STATUS: FAILED ($FAILURES file(s))"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+echo "STATUS: PASSED"
|