devtools: alert on new calls to exit from libs
This patch adds a new function that is called per every checked patch, and alerts for new instances of rte_panic/rte_exit. The check excludes comments, and alerts in the case of a positive balance between additions and removals. Signed-off-by: Arnon Warshavsky <arnon@qwilt.com> Reviewed-by: Stephen Hemminger <stephen@networkplumber.org> Tested-by: Kevin Traynor <ktraynor@redhat.com>
This commit is contained in:
parent
23888166d9
commit
7413e7f2ae
@ -43,6 +43,88 @@ print_usage () {
|
||||
END_OF_HELP
|
||||
}
|
||||
|
||||
check_forbidden_additions() {
|
||||
# This awk script receives a list of expressions to monitor
|
||||
# and a list of folders to search these expressions in
|
||||
# - No search is done inside comments
|
||||
# - Both additions and removals of the expressions are checked
|
||||
# A positive balance of additions fails the check
|
||||
read -d '' awk_script << 'EOF'
|
||||
BEGIN {
|
||||
split(FOLDERS,deny_folders," ");
|
||||
split(EXPRESSIONS,deny_expr," ");
|
||||
in_file=0;
|
||||
in_comment=0;
|
||||
count=0;
|
||||
comment_start="/*"
|
||||
comment_end="*/"
|
||||
}
|
||||
# search for add/remove instances in current file
|
||||
# state machine assumes the comments structure is enforced by
|
||||
# checkpatches.pl
|
||||
(in_file) {
|
||||
# comment start
|
||||
if (index($0,comment_start) > 0) {
|
||||
in_comment = 1
|
||||
}
|
||||
# non comment code
|
||||
if (in_comment == 0) {
|
||||
for (i in deny_expr) {
|
||||
forbidden_added = "^\+.*" deny_expr[i];
|
||||
forbidden_removed="^-.*" deny_expr[i];
|
||||
current = expressions[deny_expr[i]]
|
||||
if ($0 ~ forbidden_added) {
|
||||
count = count + 1;
|
||||
expressions[deny_expr[i]] = current + 1
|
||||
}
|
||||
if ($0 ~ forbidden_removed) {
|
||||
count = count - 1;
|
||||
expressions[deny_expr[i]] = current - 1
|
||||
}
|
||||
}
|
||||
}
|
||||
# comment end
|
||||
if (index($0,comment_end) > 0) {
|
||||
in_comment = 0
|
||||
}
|
||||
}
|
||||
# switch to next file , check if the balance of add/remove
|
||||
# of previous filehad new additions
|
||||
($0 ~ "^\+\+\+ b/") {
|
||||
in_file = 0;
|
||||
if (count > 0) {
|
||||
exit;
|
||||
}
|
||||
for (i in deny_folders) {
|
||||
re = "^\+\+\+ b/" deny_folders[i];
|
||||
if ($0 ~ deny_folders[i]) {
|
||||
in_file = 1
|
||||
last_file = $0
|
||||
}
|
||||
}
|
||||
}
|
||||
END {
|
||||
if (count > 0) {
|
||||
print "Warning in " substr(last_file,6) ":"
|
||||
print "are you sure you want to add the following:"
|
||||
for (key in expressions) {
|
||||
if (expressions[key] > 0) {
|
||||
print key
|
||||
}
|
||||
}
|
||||
exit RET_ON_FAIL
|
||||
}
|
||||
}
|
||||
EOF
|
||||
# ---------------------------------
|
||||
# refrain from new additions of rte_panic() and rte_exit()
|
||||
# multiple folders and expressions are separated by spaces
|
||||
awk -v FOLDERS="lib drivers" \
|
||||
-v EXPRESSIONS="rte_panic\\\( rte_exit\\\(" \
|
||||
-v RET_ON_FAIL=1 \
|
||||
"$awk_script" -
|
||||
}
|
||||
|
||||
number=0
|
||||
quiet=false
|
||||
verbose=false
|
||||
@ -97,6 +179,13 @@ check () { # <patch> <commit> <title>
|
||||
ret=1
|
||||
fi
|
||||
|
||||
! $verbose || printf '\nChecking forbidden tokens additions:\n'
|
||||
report=$(check_forbidden_additions <"$tmpinput")
|
||||
if [ $? -ne 0 ] ; then
|
||||
printf '%s\n' "$report"
|
||||
ret=1
|
||||
fi
|
||||
|
||||
clean_tmp_files
|
||||
[ $ret -eq 0 ] && return 0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user