diff --git a/lib/slather/coverage_info.rb b/lib/slather/coverage_info.rb index 1fad52b..85c963f 100644 --- a/lib/slather/coverage_info.rb +++ b/lib/slather/coverage_info.rb @@ -71,7 +71,15 @@ def rate_branches_tested end def source_file_pathname_relative_to_repo_root - source_file_pathname.realpath.relative_path_from(Pathname("./").realpath) + test_path=source_file_pathname + equivalence=ENV["COVERAGE_PATH_EQUIVALENCE"] + if equivalence + orig_prefix=equivalence.delete_suffix(",.") + if "#{source_file_pathname}".start_with?(orig_prefix) + test_path=Pathname("." + "#{source_file_pathname}".delete_prefix(orig_prefix)) + end + end + test_path.realpath.relative_path_from(Pathname("./").realpath) end def ignored? diff --git a/lib/slather/project.rb b/lib/slather/project.rb index 2253431..82385d0 100755 --- a/lib/slather/project.rb +++ b/lib/slather/project.rb @@ -269,6 +269,9 @@ def unsafe_llvm_cov_export_output(binary_path) if self.arch llvm_cov_args << "--arch" << self.arch end + if ENV["COVERAGE_PATH_EQUIVALENCE"] + llvm_cov_args << "-path-equivalence=#{ENV["COVERAGE_PATH_EQUIVALENCE"]}" + end `xcrun llvm-cov #{llvm_cov_args.shelljoin}` end private :unsafe_llvm_cov_export_output @@ -293,6 +296,9 @@ def unsafe_profdata_llvm_cov_output(binary_path, source_files) if self.arch llvm_cov_args << "--arch" << self.arch end + if ENV["COVERAGE_PATH_EQUIVALENCE"] + llvm_cov_args << "-path-equivalence=#{ENV["COVERAGE_PATH_EQUIVALENCE"]}" + end # POSIX systems have an ARG_MAX for the maximum total length of the command line, so the command may fail with an error message of "Argument list too long". # Using the xargs command we can break the list of source_files into sublists small enough to be acceptable.