Limit coverage to requested files (#1467)
Bazel provides COVERAGE_MANIFEST which is a file we can pass through to
llvm-cov to limit the files that we produce coverage for. Using this
revealed the path-equivalence was backwards because we're using the
coverage prefix map to disable absolute paths in code coverage info,
but llvm-cov operates on absolute paths, so we have to remap the `.` in
the coverage data to the full path so that llvm-cov understands the
relative paths (which it absolutizes internal) from the manifest file.
This feels a bit weird and ideally it could operate entirely on these
relative paths instead.
This has the side effect of excluding files that aren't part of bazel
sources, which fixes https://github.com/bazelbuild/rules_rust/issues/1466
This should also improve interaction with `--instrumentation_filter`.
Co-authored-by: UebelAndre <github@uebelandre.com>
diff --git a/util/collect_coverage.sh b/util/collect_coverage.sh
index 06fdd2a..328a5c6 100755
--- a/util/collect_coverage.sh
+++ b/util/collect_coverage.sh
@@ -19,6 +19,7 @@
-instr-profile "$profdata_file" \
-ignore-filename-regex='.*external/.+' \
-ignore-filename-regex='/tmp/.+' \
- -path-equivalence="$ROOT",. \
+ -path-equivalence=.,"$ROOT" \
"$RUNFILES_DIR/$TEST_WORKSPACE/$TEST_BINARY" \
+ @"$COVERAGE_MANIFEST" \
| sed 's#/proc/self/cwd/##' > "$COVERAGE_OUTPUT_FILE"