#!/bin/bash # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # $Source: src/build/tools/pre-commit $ # # OpenPOWER HostBoot Project # # Contributors Listed Below - COPYRIGHT 2011,2019 # [+] International Business Machines Corp. # # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. See the License for the specific language governing # permissions and limitations under the License. # # IBM_PROLOG_END_TAG if [ -f $TOOLSDIR/pre-commit-actions ]; then $TOOLSDIR/pre-commit-actions # Legacy support for older releases elif [ -f $TOOLSDIR/pre-commit-prologs ]; then $TOOLSDIR/pre-commit-prologs else echo Error: environment not setup properly... echo "Run 'source env.bash' or './hb workon' based on your current environment" 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