[llvm] r280061 - [llvm-cov] Use the native path in the coverage report.

Ying Yi via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 30 00:01:38 PDT 2016


Author: yingyi
Date: Tue Aug 30 02:01:37 2016
New Revision: 280061

URL: http://llvm.org/viewvc/llvm-project?rev=280061&view=rev
Log:
[llvm-cov] Use the native path in the coverage report.

The coverage reports contain the source or binary file paths. On Windows, 
the file path might contain the seperators of both '/' and '\'. This patch 
uses the native path in the coverage reports. For example, on Windows, 
all '/' are converted to '\'.

Differential Revision: https://reviews.llvm.org/D23922

Added:
    llvm/trunk/test/tools/llvm-cov/Inputs/native_separators.covmapping   (with props)
    llvm/trunk/test/tools/llvm-cov/native_separators.c
Modified:
    llvm/trunk/test/tools/llvm-cov/double_dots.c
    llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
    llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp
    llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp

Added: llvm/trunk/test/tools/llvm-cov/Inputs/native_separators.covmapping
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/native_separators.covmapping?rev=280061&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-cov/Inputs/native_separators.covmapping
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: llvm/trunk/test/tools/llvm-cov/double_dots.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/double_dots.c?rev=280061&r1=280060&r2=280061&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/double_dots.c (original)
+++ llvm/trunk/test/tools/llvm-cov/double_dots.c Tue Aug 30 02:01:37 2016
@@ -5,6 +5,8 @@
 // RUN: llvm-profdata merge %S/Inputs/double_dots.proftext -o %t.profdata
 // RUN: llvm-cov show %S/Inputs/double_dots.covmapping -instr-profile=%t.profdata -o %t.dir
 // RUN: FileCheck -input-file=%t.dir/index.txt %s
+// RUN: llvm-cov show -format=html %S/Inputs/double_dots.covmapping -instr-profile=%t.profdata -o %t.dir
+// RUN: FileCheck -input-file=%t.dir/index.html %s
 
 // CHECK-NOT: coverage{{.*}}dots{{.*}}..{{.*}}dots
 

Added: llvm/trunk/test/tools/llvm-cov/native_separators.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/native_separators.c?rev=280061&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/native_separators.c (added)
+++ llvm/trunk/test/tools/llvm-cov/native_separators.c Tue Aug 30 02:01:37 2016
@@ -0,0 +1,21 @@
+// To create the covmapping for this file on Linux, copy this file to /tmp
+// cd into /tmp. Use llvm-cov convert-for-testing to extract the covmapping.
+// This test is Windows-only. It checks that all paths, which are generated
+// in the index and source coverage reports, are native path. For example,
+// on Windows all '/' are converted to '\'.
+// REQUIRES: system-windows
+
+// RUN: llvm-profdata merge %S/Inputs/double_dots.proftext -o %t.profdata
+// RUN: llvm-cov show %S/Inputs/native_separators.covmapping -instr-profile=%t.profdata -o %t.dir
+// RUN: FileCheck -check-prefixes=TEXT-INDEX -input-file=%t.dir/index.txt %s
+// RUN: llvm-cov show -format=html %S/Inputs/native_separators.covmapping -instr-profile=%t.profdata -filename-equivalence ../llvm-config/../llvm-cov/native_separators.c -o %t.dir
+// RUN: FileCheck -check-prefixes=HTML-INDEX -input-file=%t.dir/index.html %s
+// RUN: llvm-cov show -format=html %S/Inputs/native_separators.covmapping -instr-profile=%t.profdata -filename-equivalence %s -o %t.dir
+// RUN: FileCheck -check-prefixes=HTML -input-file=%t.dir/coverage/tmp/native_separators.c.html %s
+
+// TEXT-INDEX: \tmp\native_separators.c
+// HTML-INDEX: >tmp\native_separators.c</a>
+// HTML: <pre>Source: \tmp\native_separators.c</pre>
+// HTML: tools\llvm-cov\Inputs\native_separators.covmapping</pre>
+
+int main() {}

Modified: llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CodeCoverage.cpp?rev=280061&r1=280060&r2=280061&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CodeCoverage.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CodeCoverage.cpp Tue Aug 30 02:01:37 2016
@@ -468,6 +468,7 @@ int CodeCoverageTool::run(Command Cmd, i
       error(EC.message(), this->ObjectFilename);
       return 1;
     }
+    sys::path::native(ObjectFilePath);
     ViewOpts.ObjectFilename = ObjectFilePath.c_str();
     switch (ViewOpts.Format) {
     case CoverageViewOptions::OutputFormat::Text:

Modified: llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp?rev=280061&r1=280060&r2=280061&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp (original)
+++ llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp Tue Aug 30 02:01:37 2016
@@ -46,6 +46,7 @@ std::string CoveragePrinter::getOutputPa
 
   auto PathFilename = (sys::path::filename(Path) + "." + Extension).str();
   sys::path::append(FullPath, PathFilename);
+  sys::path::native(FullPath);
 
   return FullPath.str();
 }

Modified: llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp?rev=280061&r1=280060&r2=280061&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp (original)
+++ llvm/trunk/tools/llvm-cov/SourceCoverageViewHTML.cpp Tue Aug 30 02:01:37 2016
@@ -308,7 +308,10 @@ Error CoveragePrinterHTML::createIndexFi
   OSRef << BeginCenteredDiv << BeginTable;
   OSRef << BeginSourceNameDiv << "Index" << EndSourceNameDiv;
   for (StringRef SF : SourceFiles) {
-    std::string LinkText = escape(sys::path::relative_path(SF), Opts);
+    SmallString<128> LinkTextStr(sys::path::relative_path(SF));
+    sys::path::remove_dots(LinkTextStr, /*remove_dot_dots=*/true);
+    sys::path::native(LinkTextStr);
+    std::string LinkText = escape(sys::path::relative_path(LinkTextStr), Opts);
     std::string LinkTarget =
         escape(getOutputPath(SF, "html", /*InToplevel=*/false), Opts);
     OSRef << tag("tr", tag("td", tag("pre", a(LinkTarget, LinkText), "code")));
@@ -340,7 +343,10 @@ void SourceCoverageViewHTML::renderSourc
   // Render the source name for the view.
   std::string SourceFile = isFunctionView() ? "Function: " : "Source: ";
   SourceFile += getSourceName().str();
-  OS << tag("pre", escape(SourceFile, getOptions()));
+  SmallString<128> SourceText(SourceFile);
+  sys::path::remove_dots(SourceText, /*remove_dot_dots=*/true);
+  sys::path::native(SourceText);
+  OS << tag("pre", escape(SourceText, getOptions()));
   // Render the object file name for the view.
   if (WholeFile)
     OS << tag("pre",




More information about the llvm-commits mailing list