summaryrefslogtreecommitdiffstats
path: root/src/build/tools/pre-commit
blob: ccf02b80a2e8b9810f9bfaf3eb29c7f856f1026a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/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
OpenPOWER on IntegriCloud