diff options
Diffstat (limited to 'src/build/tools/pre-commit')
-rwxr-xr-x | src/build/tools/pre-commit | 49 |
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 |