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 --- .../java/com/google/devtools/lcovmerger/Main.java | 70 ++++------------------ 1 file changed, 13 insertions(+), 57 deletions(-) (limited to 'tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java') diff --git a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java index b490765383..4e3b5da7c9 100644 --- a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java +++ b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java @@ -30,9 +30,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -45,17 +43,17 @@ public class Main { private static final Logger logger = Logger.getLogger(Main.class.getName()); public static void main(String[] args) { - Map flags = null; + LcovMergerFlags flags = null; try { - flags = parseFlags(args); + flags = LcovMergerFlags.parseFlags(args); } catch (IllegalArgumentException e) { logger.log(Level.SEVERE, e.getMessage()); System.exit(1); } List filesInCoverageDir = - flags.containsKey("coverage_dir") - ? getCoverageFilesInDir(flags.get("coverage_dir")) + flags.coverageDir() != null + ? getCoverageFilesInDir(flags.coverageDir()) : Collections.emptyList(); Coverage coverage = Coverage.merge( @@ -67,8 +65,12 @@ public class Main { System.exit(1); } + if (!flags.filterSources().isEmpty()) { + coverage = Coverage.filterOutMatchingSources(coverage, flags.filterSources()); + } + int exitStatus = 0; - String outputFile = flags.get("output_file"); + String outputFile = flags.outputFile(); try { LcovPrinter.print(new FileOutputStream(new File(outputFile)), coverage); } catch (IOException e) { @@ -90,13 +92,12 @@ public class Main { return gcovFiles; } - private static List getTracefiles( - Map flags, List filesInCoverageDir) { + private static List getTracefiles(LcovMergerFlags flags, List filesInCoverageDir) { List lcovTracefiles = new ArrayList<>(); - if (flags.containsKey("coverage_dir")) { + if (flags.coverageDir() != null) { lcovTracefiles = getFilesWithExtension(filesInCoverageDir, TRACEFILE_EXTENSION); - } else if (flags.containsKey("reports_file")) { - lcovTracefiles = getTracefilesFromFile(flags.get("reports_file")); + } else if (flags.reportsFile() != null) { + lcovTracefiles = getTracefilesFromFile(flags.reportsFile()); } if (lcovTracefiles.isEmpty()) { logger.log(Level.SEVERE, "No lcov file found."); @@ -170,49 +171,4 @@ public class Main { } return datFiles; } - - /** - * Parse flags in the form of "--coverage_dir=... -output_file=..." - */ - private static Map parseFlags(String[] args) { - Map flags = new HashMap<>(); - - 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 + ")"); - } - flags.put(parts[0], parts[1]); - } - - // Validate flags - for (String flag : flags.keySet()) { - switch (flag) { - case "coverage_dir": - case "reports_file": - case "output_file": - continue; - default: - throw new IllegalArgumentException("Unknown flag --" + flag); - } - } - - if (!flags.containsKey("coverage_dir") && !flags.containsKey("reports_file")) { - throw new IllegalArgumentException( - "At least one of --coverage_dir or --reports_file should be specified."); - } - if (flags.containsKey("coverage_dir") && flags.containsKey("reports_file")) { - throw new IllegalArgumentException( - "Only one of --coverage_dir or --reports_file must be specified."); - } - if (!flags.containsKey("output_file")) { - // Different from blaze, this should be mandatory - throw new IllegalArgumentException("--output_file was not specified"); - } - - return flags; - } } -- cgit v1.2.3