41 lines
854 B
Bash
Executable File
41 lines
854 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT="$(git rev-parse --show-toplevel)/scripts/util/sanitize_node.sh"
|
|
|
|
FILES=$(git diff --cached --name-only --diff-filter=ACM -- 'nodes/*.json' || true)
|
|
|
|
[[ -z "$FILES" ]] && exit 0
|
|
|
|
DIRTY=0
|
|
|
|
while IFS= read -r file; do
|
|
staged_tmp=$(mktemp)
|
|
sanitized_tmp=$(mktemp)
|
|
|
|
# 1. get staged version
|
|
git show ":$file" > "$staged_tmp"
|
|
|
|
# 2. sanitize IN PLACE (on temp copy)
|
|
cp "$staged_tmp" "$sanitized_tmp"
|
|
"$SCRIPT" "$sanitized_tmp"
|
|
|
|
# 3. if sanitizer changed file, update working tree
|
|
if ! diff -q "$staged_tmp" "$sanitized_tmp" >/dev/null; then
|
|
cp "$sanitized_tmp" "$file"
|
|
echo "Sanitized: $file"
|
|
DIRTY=1
|
|
fi
|
|
|
|
rm -f "$staged_tmp" "$sanitized_tmp"
|
|
|
|
done <<< "$FILES"
|
|
|
|
if [[ "$DIRTY" -ne 0 ]]; then
|
|
echo ""
|
|
echo "Commit paused, sanitized files must be re-staged."
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|