1*e7b1675dSTing-Kang Chang#!/bin/bash 2*e7b1675dSTing-Kang Chang############################################################################### 3*e7b1675dSTing-Kang Chang# Copyright 2017 Google LLC 4*e7b1675dSTing-Kang Chang# 5*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License"); 6*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License. 7*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at 8*e7b1675dSTing-Kang Chang# 9*e7b1675dSTing-Kang Chang# http://www.apache.org/licenses/LICENSE-2.0 10*e7b1675dSTing-Kang Chang# 11*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software 12*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS, 13*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and 15*e7b1675dSTing-Kang Chang# limitations under the License. 16*e7b1675dSTing-Kang Chang################################################################################ 17*e7b1675dSTing-Kang Chang# 18*e7b1675dSTing-Kang Chang# Usage 19*e7b1675dSTing-Kang Chang# 20*e7b1675dSTing-Kang Chang# COVERAGE_CPUS=32 tools/coverage.sh [/path/to/report-directory/] [targets] 21*e7b1675dSTing-Kang Chang# 22*e7b1675dSTing-Kang Chang# COVERAGE_CPUS defaults to 2, and the default destination is a temp 23*e7b1675dSTing-Kang Chang# dir. 24*e7b1675dSTing-Kang Chang 25*e7b1675dSTing-Kang Changset -eu 26*e7b1675dSTing-Kang Chang 27*e7b1675dSTing-Kang Changgenhtml=$(command -v genhtml) 28*e7b1675dSTing-Kang Changif [[ -z "${genhtml}" ]]; then 29*e7b1675dSTing-Kang Chang echo "Install 'genhtml' (contained in the 'lcov' package)" 30*e7b1675dSTing-Kang Chang exit 1 31*e7b1675dSTing-Kang Changfi 32*e7b1675dSTing-Kang Chang 33*e7b1675dSTing-Kang Changdestdir="$1" 34*e7b1675dSTing-Kang Changif [[ -z "${destdir}" ]]; then 35*e7b1675dSTing-Kang Chang destdir=$(mktemp -d /tmp/gerritcov.XXXXXX) 36*e7b1675dSTing-Kang Changfi 37*e7b1675dSTing-Kang Chang 38*e7b1675dSTing-Kang Changtargets="$2" 39*e7b1675dSTing-Kang Changif [[ -z "${targets}" ]]; then 40*e7b1675dSTing-Kang Chang targets="apps/... java/..." 41*e7b1675dSTing-Kang Changfi 42*e7b1675dSTing-Kang Chang 43*e7b1675dSTing-Kang Changecho "Running 'bazel coverage'; this may take a while" 44*e7b1675dSTing-Kang Chang# coverage is expensive to run; use --jobs=2 to avoid overloading the 45*e7b1675dSTing-Kang Chang# machine. 46*e7b1675dSTing-Kang Changbazel coverage -k --jobs="${COVERAGE_CPUS:-2}" -- "$targets" 47*e7b1675dSTing-Kang Chang 48*e7b1675dSTing-Kang Chang# The coverage data contains filenames relative to the Java root, and 49*e7b1675dSTing-Kang Chang# genhtml has no logic to search these elsewhere. Workaround this 50*e7b1675dSTing-Kang Chang# limitation by running genhtml in a directory with the files in the 51*e7b1675dSTing-Kang Chang# right place. Also -inexplicably- genhtml wants to have the source 52*e7b1675dSTing-Kang Chang# files relative to the output directory. 53*e7b1675dSTing-Kang Changrm -rf "${destdir}" || true 54*e7b1675dSTing-Kang Changmkdir -p "${destdir}" 55*e7b1675dSTing-Kang Chang 56*e7b1675dSTing-Kang Changfor ROOT in java apps/paymentmethodtoken; do 57*e7b1675dSTing-Kang Chang rsync -a "${ROOT}/src/main/java/" "${ROOT}/src/test/java/" "${destdir}/" 58*e7b1675dSTing-Kang Changdone 59*e7b1675dSTing-Kang Chang 60*e7b1675dSTing-Kang Changbase=$(bazel info bazel-testlogs) 61*e7b1675dSTing-Kang Chang 62*e7b1675dSTing-Kang Changfind "${base}" -name 'coverage.dat' -exec sh -c ' 63*e7b1675dSTing-Kang Chang for ff do 64*e7b1675dSTing-Kang Chang f=$(printf '%s' "${ff#"$base"/}" | sed "s|/|_|g") 65*e7b1675dSTing-Kang Chang cp "$ff" "${destdir}/$f" 66*e7b1675dSTing-Kang Chang done 67*e7b1675dSTing-Kang Chang' find-sh {} + 68*e7b1675dSTing-Kang Chang 69*e7b1675dSTing-Kang Changcd "${destdir}" 70*e7b1675dSTing-Kang Chang 71*e7b1675dSTing-Kang Changfind -name '*coverage.dat' -size 0 -exec rm -f {} + 72*e7b1675dSTing-Kang Chang 73*e7b1675dSTing-Kang Changgenhtml -o . --ignore-errors source ./*coverage.dat 74*e7b1675dSTing-Kang Changprintf "coverage report at file://%s/index.html" "${destdir}" 75