summaryrefslogtreecommitdiffstats
path: root/src/build/tools/pre-commit
diff options
context:
space:
mode:
Diffstat (limited to 'src/build/tools/pre-commit')
-rwxr-xr-xsrc/build/tools/pre-commit49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/build/tools/pre-commit b/src/build/tools/pre-commit
index 3dc621bb3..ccf02b80a 100755
--- a/src/build/tools/pre-commit
+++ b/src/build/tools/pre-commit
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2017
+# Contributors Listed Below - COPYRIGHT 2011,2019
# [+] International Business Machines Corp.
#
#
@@ -35,3 +35,48 @@ else
echo "For more info run './hb --help'"
exit -1
fi
+
+# Run cppcheck if variable is set, if not exit here
+if [[ $DOCPPCHECK -ne 1 ]]; then
+ exit 0
+fi
+
+echo "Running CPPCHECK"
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # This is the hash of the default empty tree in Git.
+ # If for some reason HEAD is not set, then diff'ing against this is like
+ # diff'ing against the very first commit.
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+${TOOLSDIR}/build-cppcheck
+CPPCHECKTOOL=${TOOLSDIR}/cpptools/cppcheck/cppcheck
+CPPCHECKFLAGS="--inline-suppr --error-exitcode=1"
+CPPCHECK=" ${CPPCHECKTOOL} ${CPPCHECKFLAGS}"
+
+for file in $(git diff-index --cached $against | \
+ grep -E '[MA].*\.(C|c|cpp|cc|cxx)$' | cut -f 2)
+do
+
+ dir="$(dirname $file)"
+ filename="$(basename $file)"
+
+ # TODO RTC 215692
+ # The following command checks for cppcheck errors. All cppcheck errors are
+ # printed to the terminal and stored to a file .${filename}.cppcheck.
+ set -o pipefail && cd ${dir} && timeout 2m ${CPPCHECK} $filename 2>&1 | tee .${filename}.cppcheck; exit_code=$?; \
+ if [ "$exit_code" -ne 1 ]; then \
+ # If exit code does not equal 1 (which is the error code when a cppcheck
+ # error is found) delete the created .cppcheck file.
+ # Note that time-out fails with error code 127.
+ rm -f .${filename}.cppcheck; \
+ fi
+ cd $PROJECT_ROOT
+
+done
+
+exit 0
OpenPOWER on IntegriCloud