#!/bin/bash # Copyright 2021 Huawei Technologies Co., Ltd # # 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. # ============================================================================ set -e function help(){ cat <<-EOF Usage: ge cov [OPTIONS] Options: -a, --all Full coverage -i, --increment Increment coverage -d, --directory Coverage of directory -h, --help EOF } PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) ALL_COV_GEN_PATH=${PROJECT_HOME}/cov/all DIFF_FILE_PATH=${PROJECT_HOME}/cov/diff DIFF_FILE_NAME=${DIFF_FILE_PATH}/inc_change_diff.txt function process_diff_format(){ sed -i "s/--- a/--- \/code\/Turing\/graphEngine/g" ${DIFF_FILE_NAME} sed -i "s/+++ b/+++ \/code\/Turing\/graphEngine/g" ${DIFF_FILE_NAME} } function add_cov_generate(){ addlcov --diff ${ALL_COV_GEN_PATH}/coverage.info ${DIFF_FILE_NAME} -o ${PROJECT_HOME}/cov/diff/inc_coverage.info } function gen_add_cov_html(){ genhtml --prefix ${PROJECT_HOME} -o ${PROJECT_HOME}/cov/diff/html ${PROJECT_HOME}/cov/diff/inc_coverage.info --legend -t CHG --no-branch-coverage --no-function-coverage } function increment_cov_for_directory(){ [ -n "${DIFF_FILE_PATH}" ] && rm -rf "${DIFF_FILE_PATH}" mkdir -p ${DIFF_FILE_PATH} git diff HEAD -- $1 >>${DIFF_FILE_NAME} process_diff_format add_cov_generate gen_add_cov_html } function run_all_coverage(){ [ -n "${ALL_COV_GEN_PATH}" ] && rm -rf ${ALL_COV_GEN_PATH} mkdir -p ${ALL_COV_GEN_PATH} pushd "${PWD}" >/dev/null cd ${PROJECT_HOME} lcov -c -d build/tests/ut/ge -d build/tests/ut/common/graph/ -o ${ALL_COV_GEN_PATH}/tmp.info lcov -r ${ALL_COV_GEN_PATH}/tmp.info '*/output/*' '*/build/opensrc/*' '*/build/proto/*' '*/third_party/*' '*/tests/*' '/usr/local/*' '/usr/include/*' '*/metadef/*' '*/parser/*' -o ${ALL_COV_GEN_PATH}/coverage.info cd ${ALL_COV_GEN_PATH} genhtml coverage.info popd >/dev/null } function do_coverage_run(){ local cov_mode=$1 local directory_dir=$2 run_all_coverage if [ "$cov_mode" = "all" ]; then exit 1 elif [ -n "$directory_dir" ]; then increment_cov_for_directory $directory_dir else increment_cov_for_directory "ge" fi } function parse_args(){ parsed_args=$(getopt -a -o aid::h --long all,increment,directory::,help -- "$@") || { help exit 1 } if [ $# -lt 1 ]; then run_all_coverage exit 1 fi local cov_mode="increment" local directory_dir= eval set -- "$parsed_args" while true; do case "$1" in -a | --all) cov_mode="all" ;; -i | --increment) ;; -d | --directory) directory_dir=$2 shift ;; -h | --help) help; exit 1; ;; --) shift; break; ;; *) help; exit 1; ;; esac shift done do_coverage_run $cov_mode $directory_dir } function main(){ parse_args "$@" } main "$@" set +e