Add options and refactoring
diff --git a/coverage-tool/coverage-reporting/merge.sh b/coverage-tool/coverage-reporting/merge.sh
index 8304487..e0ec69c 100755
--- a/coverage-tool/coverage-reporting/merge.sh
+++ b/coverage-tool/coverage-reporting/merge.sh
@@ -138,8 +138,7 @@
# 1-Json object that defines the locations of the info and json
# files
# 2-Folder to save the info and json files
-# 3-Variable that holds the name of the variable that will hold
-# the name of the file to be downloaded (reference argument)
+# 3-Reference argument to hold the copied file name location
# Outputs:
# None
################################################################
@@ -192,27 +191,35 @@
}
#####################################################################
-# Get (download/copy) info and json files from the input json file
+# Get (download/copy) info and json files from the configuration json
+# file
# Globals:
-# merge_input_json_file: Input json file with locations of info
-# and intermediate json files to be merged.
-# input_folder: Folder to put info and json files to be merged
+# merge_configuration_file: Input json file with locations of info
+# and json scm files to be merged.
+# info_files: Array of info file locations.
# Arguments:
-# None
+# 1: Target folder to download info and json files to be merged.
# Outputs:
# None
###################################################################
get_info_json_files() {
- json_string="$(cat $merge_input_json_file)"
- nf=$(get_json_object "$json_string" "-files")
+ local input_folder="${1:-$LCOV_FOLDER}"
+ local json_string="$(cat $merge_configuration_file)"
+ local config_json_file=""
+ local info_file=""
+ # Get files array
+ local nf=$(get_json_object "$json_string" "-files")
+ # Init target folder
rm -rf $input_folder > /dev/null || true
mkdir -p $input_folder
+ # Iterate through each file element and get the files
for f in $(seq 0 $(($nf - 1)));
do
pushd $input_folder > /dev/null
_file=$(get_json_object "$json_string" "files.$f")
+ # The name of the folder is the 'id' value
folder=$(get_json_object "$_file" "*id")
- echo "Geting files from project '$folder' into '$input_folder'..."
+ echo "Getting files from project '$folder' into '$input_folder'..."
mkdir -p $folder
bundles=$(get_json_object "$_file" "bundles" None)
if [ "$bundles" != "None" ];then
@@ -222,8 +229,10 @@
get_file "$(get_json_object "$bundles" "$n")" $folder
done
fi
+ # Download/copy files and save their locations
get_file "$(get_json_object "$_file" "config")" $folder config_json_file
get_file "$(get_json_object "$_file" "info")" $folder info_file
+ info_files+=($info_file)
popd > /dev/null
done
}
@@ -231,36 +240,62 @@
#################################################################
# Merge json and info files and generate branch coverage report
# Globals:
-# output_coverage_file: Location and name for merge coverage info
-# output_json_file: Location and name for merge json output
-# input_folder: Location where reside json and info files
-# LOCAL_WORKSPACE: Local workspace folder with the source files
+# merged_coverage_file: Location and name for merged coverage info
+# merged_json_file: Location and name for merged json scm sources
+# LOCAL_WORKSPACE: Local workspace folder with the source code files
+# generate_local: Flag to generate local lcov reports
# Arguments:
-# None
+# 1: Location where reside json and info files
# Outputs:
-# Output merge coverage file
-# Output merge json file
+# Merged coverage file
+# Merged json file
################################################################
merge_files() {
+ local input_folder="${1:-$LCOV_FOLDER}"
# Merge info and json files
local lc=" "
if [ -n "$LOCAL_WORKSPACE" ];then
- # Translation to be done in the info files to local workspace
+ # Translation from info workspaces into local workspace
lc=" --local-workspace $LOCAL_WORKSPACE"
fi
+ if [ "$generate_local" = true ];then
+ # Generate local reports
+ lc="${lc} -k"
+ fi
# Getting the path of the merge.py must reside at the same
# path as the merge.sh
python3 ${DIR}/merge.py \
$(find $input_folder -name "*.info" -exec echo "-a {}" \;) \
$(find $input_folder -name "*.json" -exec echo "-j {}" \;) \
- -o $output_coverage_file \
- -m $output_json_file \
+ -o $merged_coverage_file \
+ -m $merged_json_file \
$lc
}
#################################################################
+# Generate local lcov reports
+# Globals:
+# info_files: Array of locations and names of info files
+# Arguments:
+# None
+# Outputs:
+# Lcov report files for each info file
+################################################################
+generate_local_reports() {
+ for i in ${!info_files[@]};
+ do
+ local info_file=${info_files[$i]}
+ local parentdir=$(dirname "$info_file")
+ local t_info_file="${info_file/.info/_local.info}"
+ genhtml --branch-coverage $t_info_file \
+ --output-directory $parentdir
+ done
+}
+
+
+#################################################################
# Print scripts usage
# Arguments:
# None
@@ -271,20 +306,20 @@
clear
echo "Usage:"
echo "merge -h Display this help message."
- echo "-j <input json file> Input json file(info and intermediate json files to be merged)."
- echo "-l <report folder> Folder for branch coverage report. Defaults to ./lcov_folder."
- echo "-i <Path> Folder to copy/download info and json files. Defaults to ./input."
- echo "-w <Folder> Local workspace folder for source files."
- echo "-o <name> Name of the merged info file. Defaults to ./coverage_merge.info"
- echo "-m <name> Name of the merged metadata json file. Defaults to ./merge_output.json"
- echo "-c If it is set, sources from merged json files will be cloned/copied to local workspace folder."
+ echo "-j <JSON filename> JSON configuration file (info and intermediate json filenames to be merged)."
+ echo "[-l <Report path>] Coverage reports directory. Defaults to ./Coverage"
+ echo "[-w <Workspace path>] Workspace directory for source code files."
+ echo "[-o <Info filename>] Merged info file. Defaults to ./merged_coverage.info"
+ echo "[-m <JSON filename>] JSON merged SCM sources. Defaults to ./merged_scm.json"
+ echo "[-c] Flag to download/copy the source files from the JSON merged SCM into the workspace directory."
+ echo "[-g] Flag to generate local reports for each info/json instance."
echo "$help_message"
}
help_message=$(cat <<EOF
-# The script that merges the info data (code coverage) and json metadata
-# (intermediate layer) needs as an input a json file with the following
+# The script merging the info files (code coverage) and json SCM sources
+# (intermediate layer) needs a JSON configuration file with the following
# properties:
# files: array of objects that describe the type of file/project to be
# merged.
@@ -333,23 +368,17 @@
)
clear
-# Local workspace folder to contain source files
LOCAL_WORKSPACE=""
-# If this is true then will clone/copy sources from merged json
-# file into local workspace
CLONE_SOURCES=false
-# Location of the input json file that contains information about
-# the info and json files to be merged and produced a report
-merge_input_json_file=""
-# Folder to download json and info files
-input_folder="./input_folder"
+merge_configuration_file=""
+generate_local=false
# Folder to to put the reports
-LCOV_FOLDER="./lcov_folder"
+LCOV_FOLDER="./Coverage"
# File name for merge coverage info
-output_coverage_file="./coverage_merge.info"
-# File name for merge json output
-output_json_file="./merge_output.json"
-while getopts ":hj:o:l:w:i:cm:" opt; do
+merged_coverage_file="./merged_coverage.info"
+merged_json_file="./merged_scm.json"
+info_files=() # Array of info files
+while getopts ":hj:o:l:w:i:cm:g" opt; do
case ${opt} in
h )
usage
@@ -358,23 +387,23 @@
w )
LOCAL_WORKSPACE=$(cd $OPTARG; pwd)
;;
- i )
- input_folder=$OPTARG
- ;;
c )
CLONE_SOURCES=true
;;
j )
- merge_input_json_file=$OPTARG
+ merge_configuration_file=$OPTARG
;;
l )
LCOV_FOLDER=$OPTARG
;;
o )
- output_coverage_file=$OPTARG
+ merged_coverage_file=$OPTARG
;;
m )
- output_json_file=$OPTARG
+ merged_json_file=$OPTARG
+ ;;
+ g )
+ generate_local=true
;;
\? )
echo "Invalid option: $OPTARG" 1>&2
@@ -389,29 +418,32 @@
esac
done
shift $((OPTIND -1))
-if [ -z "$merge_input_json_file" ]; then
- echo "Input json file required"
+if [ -z "$merge_configuration_file" ]; then
+ echo "Merged configuration file required."
usage
exit -1
fi
if [ -z "$LOCAL_WORKSPACE" ] && [ $CLONE_SOURCES = true ]; then
- echo "Need to define a local workspace folder to clone/copy sources!"
+ echo "A local workspace directory is required to clone/copy sources!"
exit -1
fi
-# Getting the script folder where other script files must reside, i.e
+# Getting the script folder where other qa-tools script files must reside, i.e
# merge.py, clone_sources.py
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-input_folder="$(get_abs_path $input_folder)"
-LCOV_FOLDER="$(get_abs_path $LCOV_FOLDER)"
-output_coverage_file="$(get_abs_path $output_coverage_file)"
-output_json_file="$(get_abs_path $output_json_file)"
+LCOV_FOLDER="$(get_abs_path $LCOV_FOLDER)"
+merged_coverage_file="$(get_abs_path $merged_coverage_file)"
+merged_json_file="$(get_abs_path $merged_json_file)"
param_cloned=""
get_info_json_files
merge_files
if [ $CLONE_SOURCES = true ];then
- clone_repos $output_json_file
+ clone_repos $merged_json_file
fi
+
# Generate branch coverage report
-genhtml --branch-coverage $output_coverage_file \
+genhtml --branch-coverage $merged_coverage_file \
--output-directory $LCOV_FOLDER
-cd -
+
+if [ "$generate_local" = true ];then
+ generate_local_reports
+fi