#!/usr/bin/env sh set -eu failed=0 cr=$(printf '\r') staged_shell_files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.sh$' || true) for file in $staged_shell_files; do mode=$(git ls-files --stage -- "$file" | awk '{print $1}') if [ "$mode" != "100755" ]; then echo "ERROR: $file is not executable in Git index. Run: git add --chmod=+x $file" >&2 failed=1 fi if git show ":$file" | grep -q "$cr"; then echo "ERROR: $file contains CRLF in staged content. Use LF line endings." >&2 failed=1 fi done if [ "$failed" -ne 0 ]; then echo "Pre-commit check failed." >&2 exit 1 fi