e479231b21
`git diff-tree` used to fail on the `3.2` branch (and other non-master branches) as Travis doesn't actually check that branch from the remote: ``` fatal: ambiguous argument '3.2': unknown revision or path not in the working tree. ``` The exit code would still be 0 so we'd miss badly formatted commits targeting stable branches. We do it manually to ensure that it's going to work as we want it.
47 lines
1.8 KiB
Bash
Executable File
47 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
CLANG_FORMAT=clang-format-8
|
|
|
|
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
|
# Travis only clones the PR branch and uses its HEAD commit as detached HEAD,
|
|
# so it's problematic when we want an exact commit range for format checks.
|
|
# We fetch upstream to ensure that we have the proper references to resolve.
|
|
# Ideally we would use $TRAVIS_COMMIT_RANGE but it doesn't play well with PR
|
|
# updates, as it only includes changes since the previous state of the PR.
|
|
git remote add upstream https://github.com/godotengine/godot \
|
|
--no-tags -f -t $TRAVIS_BRANCH
|
|
RANGE="upstream/$TRAVIS_BRANCH HEAD"
|
|
else
|
|
# Test only the last commit, since $TRAVIS_COMMIT_RANGE wouldn't support
|
|
# force pushes.
|
|
RANGE=HEAD
|
|
fi
|
|
|
|
FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -v platform/android/java/lib/src/com/ | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|m|mm|inc|java|glsl)$")
|
|
echo "Checking files:\n$FILES"
|
|
|
|
# create a random filename to store our generated patch
|
|
prefix="static-check-clang-format"
|
|
suffix="$(date +%s)"
|
|
patch="/tmp/$prefix-$suffix.patch"
|
|
|
|
for file in $FILES; do
|
|
"$CLANG_FORMAT" -style=file "$file" | \
|
|
diff -u "$file" - | \
|
|
sed -e "1s|--- |--- a/|" -e "2s|+++ -|+++ b/$file|" >> "$patch"
|
|
done
|
|
|
|
# if no patch has been generated all is ok, clean up the file stub and exit
|
|
if [ ! -s "$patch" ] ; then
|
|
printf "Files in this commit comply with the clang-format rules.\n"
|
|
rm -f "$patch"
|
|
exit 0
|
|
fi
|
|
|
|
# a patch has been created, notify the user and exit
|
|
printf "\n*** The following differences were found between the code to commit "
|
|
printf "and the clang-format rules:\n\n"
|
|
cat "$patch"
|
|
printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
|
|
exit 1
|