isa-l/tools/check_format.sh
Marcel Cornu 07bca509e7 tools: use clang-format for style checking
Signed-off-by: Marcel Cornu <marcel.d.cornu@intel.com>
2024-04-22 11:35:03 +02:00

104 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
rc=0
verbose=0
clang_format_min_version=18
function clang_format_version() {
version_str=$($clang_format --version)
regex="[0-9]+"
if [[ $version_str =~ $regex ]]; then
major_version="${BASH_REMATCH[0]}"
echo $major_version
fi
}
# set clang-format binary if not set externally
if [[ -z $CLANGFORMAT ]]; then
clang_format="clang-format"
else
clang_format=$CLANGFORMAT
fi
while [ -n "$*" ]; do
case "$1" in
-v )
verbose=1
shift
;;
-h )
echo check_format.sh [-h -v]
exit 0
;;
esac
done
echo "Checking format of files in the git index at $PWD"
if ! git rev-parse --is-inside-work-tree >& /dev/null; then
echo "Not in a git repo: Fail"
exit 1
fi
if [ $(clang_format_version) -ge $clang_format_min_version ]; then
echo "Checking C files for coding style (clang-format v$(clang_format_version))..."
for f in `git ls-files '*.[c|h]'`; do
[ "$verbose" -gt 0 ] && echo "checking style on $f"
if ! $clang_format -style=file --dry-run --Werror "$f" >/dev/null 2>&1; then
echo " File found with formatting issues: $f"
[ "$verbose" -gt 0 ] && $clang_format -style=file --dry-run "$f"
rc=1
fi
done
[ "$rc" -gt 0 ] && echo " Run ./tools/format.sh to fix formatting issues"
else
echo "You do not have clang-format version ${clang_format_min_version}+" \
"installed so your code style is not being checked!"
fi
if hash grep; then
echo "Checking for dos and whitespace violations..."
for f in $(git ls-files); do
[ "$verbose" -gt 0 ] && echo "checking whitespace on $f"
if grep -q '[[:space:]]$' $f ; then
echo " File found with trailing whitespace: $f"
rc=1
fi
if grep -q $'\r' $f ; then
echo " File found with dos formatting: $f"
rc=1
fi
done
fi
echo "Checking source files for permissions..."
while read -r perm _res0 _res1 f; do
[ -z "$f" ] && continue
[ "$verbose" -gt 0 ] && echo "checking permissions on $f"
if [ "$perm" -ne 100644 ]; then
echo " File found with permissions issue ($perm): $f"
rc=1
fi
done <<< $(git ls-files -s -- ':(exclude)*.sh')
echo "Checking script files for permissions..."
while read -r perm _res0 _res1 f; do
[ -z "$f" ] && continue
[ "$verbose" -gt 0 ] && echo "checking permissions on $f"
if [ "$perm" -ne 100755 ]; then
echo " Script found with permissions issue ($perm): $f"
rc=1
fi
done <<< $(git ls-files -s '*.sh')
echo "Checking for signoff in commit message..."
if ! git log -n 1 --format=%B --no-merges | grep -q "^Signed-off-by:" ; then
echo " Commit not signed off. Please read src/CONTRIBUTING.md"
rc=1
fi
[ "$rc" -gt 0 ] && echo Format Fail || echo Format Pass
exit $rc