43 lines
1.1 KiB
Bash
Executable File
43 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
source "$(dirname "$BASH_SOURCE")/.validate"
|
||
|
||
IFS=$'\n'
|
||
files=($(validate_diff --diff-filter=ACMR --name-only -- '*.c' | grep -v '^vendor/' || true))
|
||
unset IFS
|
||
|
||
# indent(1): "You must use the ‘-T’ option to tell indent the name of all the typenames in your program that are defined by typedef."
|
||
INDENT="indent -linux -l120 -T size_t -T jmp_buf"
|
||
if [ -z "$(indent --version 2>&1 | grep GNU)" ]; then
|
||
echo "Skipping C indentation checks, as GNU indent is not installed."
|
||
exit 0
|
||
fi
|
||
|
||
badFiles=()
|
||
for f in "${files[@]}"; do
|
||
orig=$(mktemp)
|
||
formatted=$(mktemp)
|
||
# we use "git show" here to validate that what's committed is formatted
|
||
git show "$VALIDATE_HEAD:$f" > ${orig}
|
||
${INDENT} ${orig} -o ${formatted}
|
||
if [ "$(diff -u ${orig} ${formatted})" ]; then
|
||
badFiles+=("$f")
|
||
fi
|
||
rm -f ${orig} ${formatted}
|
||
done
|
||
|
||
if [ ${#badFiles[@]} -eq 0 ]; then
|
||
echo 'Congratulations! All C source files are properly formatted.'
|
||
else
|
||
{
|
||
echo "These files are not properly formatted:"
|
||
for f in "${badFiles[@]}"; do
|
||
echo " - $f"
|
||
done
|
||
echo
|
||
echo "Please reformat the above files using \"${INDENT}\" and commit the result."
|
||
echo
|
||
} >&2
|
||
false
|
||
fi
|