From 6aee289b3efea1d4f44fbcaa7d97ce276d17214e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 19 Mar 2017 12:54:11 +0100 Subject: 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. --- misc/travis/clang-format.sh | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 misc/travis/clang-format.sh (limited to 'misc') diff --git a/misc/travis/clang-format.sh b/misc/travis/clang-format.sh new file mode 100755 index 0000000000..5ecc1b37d8 --- /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 '\n" +exit 1 -- cgit v1.2.3