coverity: supports long commands and upload stream [1/1]
PD#SWPL-64962
Problem:
check_coverity bash can not compile with long cmd.
Solution:
bash supports long commands and upload stream.
Verify:
sc2_ah212
Change-Id: I48b386ec86c6b363dbde6a4c6168100988f30503
Signed-off-by: dongqing.li <dongqing.li@amlogic.com>
diff --git a/check_coverity.sh b/check_coverity.sh
index 5a70b6a..0bfee97 100755
--- a/check_coverity.sh
+++ b/check_coverity.sh
@@ -1,8 +1,13 @@
#!/bin/bash
#
-# author: dongqing.li@amlogic.com
-# 2021.11.22 v1.0 init.
-#
+# =============================================================================
+# @Module: BootLoader coverity check
+# @Author: Li Dongqing (dongqing.li@amlogic.com)
+# @License: Copyright (c) 2019 Amlogic, Inc. All rights reserved.
+# @Changes:
+# 1. 2021.11.22 v0.1 - Create bash check_coverity.
+# 2. 2022.09.29 v0.2 - Support run long command
+# =============================================================================
#############
# function
@@ -13,9 +18,11 @@
COV_IM_DIR="./cov-imdir"
COV_RESULT_HTML="./result-html"
HIGH_LEVEL="0"
-PATTERN_PATH=""
+DIR_FILTER=""
PATTERN_ENABLE="0"
IS_CMD_STRING=0
+RUN_BASH=""
+MANUAL_RUN_FLAG=0
#############
# function
@@ -27,9 +34,7 @@
}
function check_cov_path() {
- echo ""
- echo "check_cov_path: ${MKPATH}"
- echo ""
+ echo "[run cov path] : ${MKPATH}"
if [ -d "${COV_IM_DIR}" ]; then
rm -rf ${COV_IM_DIR}
fi
@@ -39,9 +44,25 @@
fi
}
+function check_cov_build_version() {
+ COV_CONFIG=`cov-build --help | grep 'Task Reference' -c`
+ if [ "${COV_CONFIG}" = "0" ]; then
+ echo
+ echo -e "\e[1;35m Run cov-build error! Please check: \e[0m"
+ echo " 1.is installed ? if not, call IT. (/proj/coverity/cov-analysis-linux64-2021.12.0/bin)"
+ echo " 2.in PATH env ? if not, export it.(export PATH=/proj/coverity/cov-analysis-linux64-2021.12.0/bin/:$PATH)"
+ echo
+ exit 0
+ else
+ COV_VERSION=`cov-build --help | grep 'Task Reference' | awk '{print $2}'`
+ echo "check_cov_version: ${COV_VERSION}"
+ fi
+}
+
function run_coverity() {
echo ""
echo -e "\e[1;35m[1] run cov-build: $@ \e[0m"
+ check_cov_build_version
cov-build --dir ${COV_IM_DIR} $@ || err_exit "cov-build error."
echo -e "\e[1;35m[1] run cov-build OK. \e[0m"
}
@@ -50,14 +71,14 @@
echo ""
echo -e "\e[1;35m[2] run cov-analyze ... \e[0m"
if [ ${HIGH_LEVEL} = "1" ]; then
- if [ "${PATTERN_ENABLE}" = "1" ];then
- cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze high level error."
- else
+ if [ "${PATTERN_ENABLE}" = "1" ];then
+ cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 --tu-pattern "file('/${DIR_FILTER}')" || err_exit "cov-analyze high level error."
+ else
cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 || err_exit "cov-analyze high level error."
fi
else
if [ "${PATTERN_ENABLE}" = "1" ];then
- cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze normal level error."
+ cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${DIR_FILTER}')" || err_exit "cov-analyze normal level error."
else
cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all || err_exit "cov-analyze normal level error."
fi
@@ -70,6 +91,25 @@
echo -e "\e[1;35m[3] run cov-format-errors OK. \e[0m"
echo "end."
+ # show coverity result info
+ show_coverity_result
+
+ if [ "${COVERITY_PUSH}" = "1" ]; then
+ echo ""
+ echo -e "\e[1;35m[4] run cov-commit-defects ... \e[0m"
+ if [ -z ${COVERITY_KEY} -o -z ${COVERITY_STREAM} ]; then
+ echo -e "\e[1;35m[4] --key or --stream is not set, push stream exit ! \e[0m"
+ else
+ cov-commit-defects --dir ${COV_IM_DIR} --auth-key-file ${COVERITY_KEY} --host 10.18.11.122 --stream ${COVERITY_STREAM} --noxrefs || err_exit "cov-format-errors error."
+ echo -e "\e[1;35m[4] run cov-commit-defects OK. \e[0m"
+ echo ""
+ echo -e "\e[1;35m[snapshot-result] \e[0m"
+ echo "you can view the result with the [New snapshot ID] above on coverity server!"
+ echo "path: http://10.18.11.122:8080/ -> choose projects -> choose SNAPSHOTS(ALL in Project) -> choose ID"
+ echo " "
+ fi
+ fi
+
rm -rf ${COV_IM_DIR}
}
@@ -87,15 +127,15 @@
function check_coverity() {
MK_ARGV=$@
- if [ -z "${PATTERN_PATH}" ];then
- echo "pattern_path not set, ignore. "
+ if [ -z "${DIR_FILTER}" ];then
+ echo "DIR_FILTER not set, ignore. "
PATTERN_ENABLE="0"
else
- if [ -e "./${PATTERN_PATH}" ];then
- echo "PATTERN_PATH set ok: ${PATTERN_PATH}"
+ if [ -e "./${DIR_FILTER}" ];then
+ echo "DIR_FILTER set ok: ${DIR_FILTER}"
PATTERN_ENABLE="1"
else
- echo "PATTERN_PATH invalid, ingore."
+ echo "DIR_FILTER invalid, ingore."
PATTERN_ENABLE="2"
fi
fi
@@ -117,7 +157,7 @@
NEW_ARGV=`echo "${MK_ARGV//--cov/ }"`
fi
if [ "PATTERN_ENABLE" != "0" ];then
- NEW_ARGV=`echo "${NEW_ARGV//${PATTERN_PATH}/ }"`
+ NEW_ARGV=`echo "${NEW_ARGV//${DIR_FILTER}/ }"`
fi
echo "coverity new command : ./mk ${NEW_ARGV}"
MKPATH=`pwd -P`
@@ -132,9 +172,6 @@
# analysis coverity
analysis_coverity
-
- # show coverity result info
- show_coverity_result
}
#############
@@ -196,24 +233,32 @@
}
function show_help() {
-
+ echo
echo -e "\e[1;35m [usage] \e[0m"
- echo " /path/to/bootloader/fip/`basename $0` -c [cmd_string] -p [pattern_path] -t"
- echo ""
+ echo " ./check_coverity.sh -c '[cmd_string]'"
+ echo
echo -e "\e[1;35m [option] \e[0m"
- echo " -c : cmd string, eg: ./check.sh "
- echo " -p : detect path, only output errors in this path."
- echo " -t : top level mode, could detect more errors."
+ echo " -c : set cmd string, eg: './check.sh' or './mk sc2_ah212 --avb'"
+ echo " -d : set dir filter, eg: 'plat/t3/'(relative path, no prefix './')"
+ echo " -t : set top level mode, could detect more errors."
+ echo " -k : set coverity key, must be used with '-p'"
+ echo " -s : set coverity stream, must be used with '-p'"
+ echo " -p : push coverity result to cov server."
echo " -h : show help"
- echo ""
+ echo
echo -e "\e[1;35m [example] \e[0m"
- echo " 1) In path [bl2/core]:"
- echo " /path/to/bootloader/fip/`basename $0` -c bl2_core"
- echo " 2) In path [bl2/src] [bl2/ree] [bl2/tee] [bl31_1.3/src] [bl32_3.8/src]:"
- echo " /path/to/bootloader/fip/`basename $0` -c ./check.sh"
- echo " 3) In path [bl33/v2015] [bl33/v2019]:"
- echo " /path/to/bootloader/fip/`basename $0` -c ./check_compile.sh"
- echo ""
+ echo " 1) run coverity with compile cmd"
+ echo " cd bl2/core; ../../fip/check_coverity.sh -c './mk sc2 --dsto'"
+ echo " cd bl2/core; ../../fip/check_coverity.sh -c './mk sc2 --dsto' -d plat/sc2/"
+ echo " 2) quick for [bl2/core]:"
+ echo " bash /path/to/fip/check_coverity.sh -c bl2_core"
+ echo " 3) quick for [bl2/src] [bl2/ree] [bl2/tee] [bl31_1.3/src] [bl32_3.8/src]:"
+ echo " bash /path/to/fip/check_coverity.sh -c ./check.sh"
+ echo " 4) quick for [bl33/v2015] [bl33/v2019]:"
+ echo " bash /path/to/fip/check_coverity.sh -c ./check_compile.sh"
+ echo " 5) run coverity and push result to cov server"
+ echo " bash /path/to/fip/check_coverity.sh -c './mk sc2' -k /path/to/user.key -s bootloader-amlogic-dev-bl2-core -p"
+ echo
return
}
@@ -221,42 +266,24 @@
# main
#############
function main() {
- if [[ "$0" =~ "coverity" ]]; then
- echo "cmd string: $0 $@"
- if [ $# -lt 1 ]; then
- show_help
- fi
- else
- return
+ echo
+ echo "[shell name] : $RUN_BASH"
+ echo "[compile cmd] : $CMD_STRING"
+ if [ ! -z "${DIR_FILTER}" ]; then
+ echo "[pattern path] : $DIR_FILTER"
fi
- while getopts c:C:p:P:t:T:hH opt; do
- case ${opt} in
- c|C)
- CMD_STRING=${OPTARG}
- IS_CMD_STRING=1
- ;;
- p|P)
- PATTERN_PATH=${OPTARG}
- ;;
- t|T)
- HIGH_LEVEL="1"
- ;;
- h|H)
- show_help
- ;;
- *)
- show_help
- ;;
- esac
- done
+ if [ "${COVERITY_PUSH}" = "1" ]; then
+ echo "[coverity keynum] : $COVERITY_KEY"
+ echo "[coverity stream] : $COVERITY_STREAM"
+ fi
if [ $IS_CMD_STRING -eq 1 ]; then
# check coverity path
check_cov_path
# run_coverity
- if [ ${CMD_STRING} = "bl2_core" ]; then
+ if [[ "${CMD_STRING}" = "bl2_core" ]]; then
run_cov_for_bl2_core
else
run_coverity ${CMD_STRING}
@@ -264,14 +291,73 @@
# analysis coverity
analysis_coverity
-
- # show coverity result path
- show_coverity_result
fi
+
+ return
}
#
# start here.
#
MKPATH=`pwd -P`
-main $@
+
+if [[ "$0" =~ "check_coverity" ]]; then
+ RUN_BASH="$0"
+ if [ $# -gt 0 ]; then
+ MANUAL_RUN_FLAG=1
+ fi
+fi
+
+if [ ${MANUAL_RUN_FLAG} -eq 1 ]; then
+ ARGS=$(getopt -o d:k:s:pth -a -l c:,d:,k:,s:pth -n "check_coverity.sh" -- "$@")
+ if [ $? != 0 ]; then
+ exit 0
+ fi
+
+ eval set -- "$ARGS"
+ while true
+ do
+ case "$1" in
+ -c | --c | --cmd)
+ CMD_STRING="$2"
+ IS_CMD_STRING=1
+ shift 2
+ ;;
+ -d | --dir)
+ DIR_FILTER="$2"
+ if [ -e "./${DIR_FILTER}" ];then
+ PATTERN_ENABLE="1"
+ else
+ PATTERN_ENABLE="2"
+ fi
+ shift 2
+ ;;
+ -t | --top)
+ HIGH_LEVEL="1"
+ shift
+ ;;
+ -k | --key)
+ COVERITY_KEY="$2"
+ shift 2
+ ;;
+ -s | --stream)
+ COVERITY_STREAM="$2"
+ shift 2
+ ;;
+ -p | --push)
+ COVERITY_PUSH="1"
+ shift
+ ;;
+ -h | --help)
+ show_help
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ done
+
+ main
+fi