Merge pull request #1699 from AkihiroSuda/indent-c
make: validate C format
This commit is contained in:
commit
c4e4bb0df2
1
Makefile
1
Makefile
|
@ -112,6 +112,7 @@ clean:
|
|||
|
||||
validate:
|
||||
script/validate-gofmt
|
||||
script/validate-c
|
||||
$(GO) vet $(allpackages)
|
||||
|
||||
ci: validate test release
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
|
||||
#include <linux/limits.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/types.h>
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
#!/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
|
Loading…
Reference in New Issue