1#!/bin/bash 2# Copyright 2022 Google LLC. All rights reserved. 3# 4# Licensed under the Apache License, Version 2.0 (the License); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16# 17set -eu 18 19readonly current_dir="$0.runfiles" 20readonly in="$1" 21readonly out="$2" 22shift 2 23 24readonly tmp_dir="$(mktemp -d)" 25trap "rm -rf ${tmp_dir}" EXIT 26 27readonly jacoco="$(ls ${current_dir}/rules_kotlin/bazel/jacoco_cli)" 28readonly jar="$(which jar)" 29 30# Unzip input Jar and run JaCoCo over it 31mkdir "${tmp_dir}/classes" 32mkdir "${tmp_dir}/instrumented" 33unzip -qq -d "${tmp_dir}/classes" "${in}" 34"${jacoco}" instrument "${tmp_dir}/classes" --dest "${tmp_dir}/instrumented" >/dev/null 35 36# Rename input .class files to .class.uninstrumented 37find "${tmp_dir}/classes" -name '*.class' -exec mv {} {}.uninstrumented \; 38 39# Zip all the files together 40"${jar}" cf "${out}" -C "${tmp_dir}/instrumented" . 41"${jar}" uf "${out}" -C "${tmp_dir}/classes" . 42"${jar}" uf "${out}" "$@" 43