From a1a7f0062c91fc923c2e0a10f66a00d2ab4a31a4 Mon Sep 17 00:00:00 2001 From: iirina Date: Tue, 14 Aug 2018 01:00:43 -0700 Subject: Add --filter_sources flag to LcovMerger. When the `--filter_sources` flag is used `LcovMerger` excludes from the merged coverage the sources whose names match any of the regex in the flag. The value of `--filter_sources` is a list of regex separated by `,`. This flag comes as a preparation for using `gcov` instead of `lcov` for collecting coverage data for C++. The flag was not needed before because `lcov` has some functionality for excluding some files (e.g. `--no-external` to ignore coverage data for system files). Closes #5834. PiperOrigin-RevId: 208606867 --- .../devtools/lcovmerger/LcovMergerFlags.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 tools/test/LcovMerger/java/com/google/devtools/lcovmerger/LcovMergerFlags.java (limited to 'tools/test/LcovMerger/java/com/google/devtools/lcovmerger/LcovMergerFlags.java') diff --git a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/LcovMergerFlags.java b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/LcovMergerFlags.java new file mode 100644 index 0000000000..c218c53317 --- /dev/null +++ b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/LcovMergerFlags.java @@ -0,0 +1,82 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.lcovmerger; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; +import java.util.List; +import javax.annotation.Nullable; + +@AutoValue +abstract class LcovMergerFlags { + + @Nullable + abstract String coverageDir(); + + @Nullable + abstract String reportsFile(); + + abstract String outputFile(); + + abstract List filterSources(); + + /** Parse flags in the form of "--coverage_dir=... -output_file=..." */ + static LcovMergerFlags parseFlags(String[] args) { + ImmutableList.Builder filterSources = new ImmutableList.Builder<>(); + String coverageDir = null; + String reportsFile = null; + String outputFile = null; + + for (String arg : args) { + if (!arg.startsWith("--")) { + throw new IllegalArgumentException("Argument (" + arg + ") should start with --"); + } + String[] parts = arg.substring(2).split("=", 2); + if (parts.length != 2) { + throw new IllegalArgumentException("There should be = in argument (" + arg + ")"); + } + switch (parts[0]) { + case "coverage_dir": + coverageDir = parts[1]; + break; + case "reports_file": + reportsFile = parts[1]; + break; + case "output_file": + outputFile = parts[1]; + break; + case "filter_sources": + filterSources.add(parts[1]); + break; + default: + throw new IllegalArgumentException("Unknown flag " + arg); + } + } + + if (coverageDir == null && reportsFile == null) { + throw new IllegalArgumentException( + "At least one of --coverage_dir or --reports_file should be specified."); + } + if (coverageDir != null && reportsFile != null) { + throw new IllegalArgumentException( + "Only one of --coverage_dir or --reports_file must be specified."); + } + if (outputFile == null) { + throw new IllegalArgumentException("--output_file was not specified."); + } + return new AutoValue_LcovMergerFlags( + coverageDir, reportsFile, outputFile, filterSources.build()); + } +} -- cgit v1.2.3