aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorRémi Verschelde2017-03-19 12:54:11 +0100
committerRémi Verschelde2017-03-19 16:14:53 +0100
commit51c5a12f43e5c729a283c64822f81e416ecb764b (patch)
treec50d7c08a9ed98f0ccf15cd2451d1a6d804b23dc /misc
parent3251e93cee07e431dca9a8c81d797a648bdd3d26 (diff)
downloadgodot-51c5a12f43e5c729a283c64822f81e416ecb764b.tar.gz
godot-51c5a12f43e5c729a283c64822f81e416ecb764b.tar.zst
godot-51c5a12f43e5c729a283c64822f81e416ecb764b.zip
Travis: Run clang-format static check
Commits or PRs that do not respect the clang-format style that we enforce will fail the test. Adding ubuntu-toolchain-r-test as its libstdc++ is necessary to install libllvm-3.9. (cherry picked from commit 6aee289b3efea1d4f44fbcaa7d97ce276d17214e)
Diffstat (limited to 'misc')
-rwxr-xr-xmisc/travis/clang-format.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/misc/travis/clang-format.sh b/misc/travis/clang-format.sh
new file mode 100755
index 000000000..5ecc1b37d
--- /dev/null
+++ b/misc/travis/clang-format.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+CLANG_FORMAT=clang-format-3.9
+
+if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
+ # Check the whole commit range against $TRAVIS_BRANCH, the base merge branch
+ # We could use $TRAVIS_COMMIT_RANGE but it doesn't play well with force pushes
+ RANGE="$(git rev-parse $TRAVIS_BRANCH) HEAD"
+else
+ # Test only the last commit
+ RANGE=HEAD
+fi
+
+FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -e "\.cpp$" -e "\.h$" -e "\.inc$")
+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