-
Notifications
You must be signed in to change notification settings - Fork 46
Expand file tree
/
Copy pathcpplint_ci.sh
More file actions
executable file
·120 lines (96 loc) · 3.12 KB
/
cpplint_ci.sh
File metadata and controls
executable file
·120 lines (96 loc) · 3.12 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash +e
#
# Copyright (C) 2020 HERE Europe B.V.
#
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# License-Filename: LICENSE
#
# This script gets the changed files in the pull request, and runs
# cpplint tool to verify them
# Get the current branch name
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [[ $CURRENT_BRANCH == "master" ]]; then
printf "Currently in master branch, skipping cpplint.\n"
exit 0
else
printf "Currently in %s branch. Running cpplint.\n" "$CURRENT_BRANCH"
fi
set +e
# Get affected files and filter source files
FILES=$(git diff-tree --no-commit-id --name-only -r master "$CURRENT_BRANCH" \
| grep '\.c\|\.cpp\|\.cxx\|\.h\|\.hpp\|\.hxx')
set -e
if [ -z "$FILES" ]; then
printf "No affected files, exiting.\n"
exit 0
else
printf "Affected files:\n %s\n" "$FILES"
fi
# Install cpplint tool using pip
printf "Installing cpplint using pip\n\n"
pip install --user cpplint
printf "\n\nRunning cpplint\n\n"
# Run the cpplint tool and collect all warnings
cpplint $FILES 2> warnings.txt
printf "\n\nComplete cpplint\n\n"
cat warnings.txt
printf "\n\nRunning cpplint again and check no new warnings found\n\n"
CPPLINT_BLOCKING_FILTER="\
-runtime/references,\
-runtime/string,\
-runtime/int,\
-runtime/explicit,\
-runtime/arrays,\
-runtime/threadsafe_fn,\
-build/include_subdir,\
-build/include_order,\
-build/include_what_you_use,\
-build/c++11,\
-readability/multiline_string,\
-readability/casting,\
-readability/todo,\
-readability/alt_tokens,\
-readability/braces,\
-readability/check,\
-readability/multiline_comment,\
-whitespace/comma,\
-whitespace/parens,\
-whitespace/braces,\
-whitespace/line_length,\
-whitespace/comments"
cpplint --filter="$CPPLINT_BLOCKING_FILTER" $FILES 2> errors.txt
RESULT=$?
if [ "$RESULT" -ne "0" ]; then
printf "\n\nNew errors found, please check them:\n\n"
cat errors.txt
exit $RESULT
fi
# Check for public headers modified, must have no new warnings:
# dataservice-read/include
# dataservice-write/include
CRITICAL_PATHS=$(echo "$FILES" | grep "read/include\|write/include")
if [ ! -z "$CRITICAL_PATHS" ]; then
printf "\n\nPublic headers modified, running full check on them\n\n"
CPPLINT_IGNORED_WARNINGS="--filter=-build/include_order"
cpplint $CPPLINT_IGNORED_WARNINGS $CRITICAL_PATHS 2> errors.txt
RESULT=$?
printf "\n\nComplete cpplint for protected paths\n\n"
cat errors.txt
exit $RESULT
else
# Despite the error found exit without errors.
# Remove this exit to make the script blocking on CI.
exit 0
fi