Files
gerrit/tools/coverage.sh
Edwin Kempin 9bb49197ed Fixes for tools/coverage.sh
* add '-mindepth 1' to the 'find' command that is used to get the plugin
  list:
  Without this parameter the result contains "plugins/" in addition to
  "plugins/<plugin-1>", "plugins/<plugin-2", etc.
* fix copy command to copy plugin sources:
  We used "cp -r plugins/*/{java,javatests}/* ${destdir}/${plugin}/java"
  which copied the code of all plugins into each plugin folder at the
  destination. To fix this include the plugin name into the source
  folder, so that only code of this one plugin is copied. If we do this
  we should test if the source folder exists before copying to avoid
  error messages for non-existing folder.

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I338b99209eff5643a83e401e2a56ac3113cbe541
2020-12-11 10:58:38 +01:00

67 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
#
# Usage
#
# COVERAGE_CPUS=32 tools/coverage.sh [/path/to/report-directory/]
#
# COVERAGE_CPUS defaults to 2, and the default destination is a temp
# dir.
genhtml=$(which genhtml)
if [[ -z "${genhtml}" ]]; then
echo "Install 'genhtml' (contained in the 'lcov' package)"
exit 1
fi
destdir="$1"
if [[ -z "${destdir}" ]]; then
destdir=$(mktemp -d /tmp/gerritcov.XXXXXX)
fi
echo "Running 'bazel coverage'; this may take a while"
# coverage is expensive to run; use --jobs=2 to avoid overloading the
# machine.
bazel coverage -k --jobs=${COVERAGE_CPUS:-2} -- ...
# The coverage data contains filenames relative to the Java root, and
# genhtml has no logic to search these elsewhere. Workaround this
# limitation by running genhtml in a directory with the files in the
# right place. Also -inexplicably- genhtml wants to have the source
# files relative to the output directory.
mkdir -p ${destdir}/java
cp -r {java,javatests}/* ${destdir}/java
mkdir -p ${destdir}/plugins
for plugin in `find plugins/ -mindepth 1 -maxdepth 1 -type d`
do
mkdir -p ${destdir}/${plugin}/java
if [ -e ${plugin}/java/ ]
then cp -r ${plugin}/java/* ${destdir}/${plugin}/java
fi
if [ -e ${plugin}/javatests/ ]
then cp -r ${plugin}/javatests/* ${destdir}/${plugin}/java
fi
# for backwards compatibility support plugins with old file structure
mkdir -p ${destdir}/${plugin}/src/{main,test}/java
if [ -e ${plugin}/src/main/java/ ]
then cp -r ${plugin}/src/main/java/* ${destdir}/${plugin}/src/main/java/
fi
if [ -e ${plugin}/src/test/java/ ]
then cp -r ${plugin}/src/test/java/* ${destdir}/${plugin}/src/test/java/
fi
done
base=$(bazel info bazel-testlogs)
for f in $(find ${base} -name 'coverage.dat') ; do
cp $f ${destdir}/$(echo $f| sed "s|${base}/||" | sed "s|/|_|g")
done
cd ${destdir}
find -name '*coverage.dat' -size 0 -delete
genhtml -o . --ignore-errors source *coverage.dat
echo "coverage report at file://${destdir}/index.html"