[PATCH] D20803: Displaying coverage information for all source files present in a directory
Chakshu Grover via llvm-commits
llvm-commits at lists.llvm.org
Mon May 30 23:50:34 PDT 2016
chakshugrover created this revision.
chakshugrover added reviewers: davidxl, bogner, vsk.
chakshugrover added a subscriber: llvm-commits.
The llvm-cov tool currently reads code coverage data files and displays the coverage information for **a specified source file**. This patch will enable us to provide it with a **directory** and it will display the information for all the source files inside that directory by iterating over all of them using directory_iterator.
It still works if you provide a single source file.
http://reviews.llvm.org/D20803
Files:
tools/llvm-cov/CodeCoverage.cpp
Index: tools/llvm-cov/CodeCoverage.cpp
===================================================================
--- tools/llvm-cov/CodeCoverage.cpp
+++ tools/llvm-cov/CodeCoverage.cpp
@@ -32,7 +32,10 @@
#include "llvm/Support/Process.h"
#include "llvm/Support/Signals.h"
#include <functional>
+#include <string>
#include <system_error>
+#include <sys/types.h>
+#include <sys/stat.h>
using namespace llvm;
using namespace coverage;
@@ -70,6 +73,8 @@
/// \brief Load the coverage mapping data. Return true if an error occured.
std::unique_ptr<CoverageMapping> load();
+ void walk(SmallString<128> Path);
+
int run(Command Cmd, int argc, const char **argv);
typedef std::function<int(int, const char **)> CommandLineParserType;
@@ -239,6 +244,30 @@
return Coverage;
}
+void CodeCoverageTool::walk(SmallString<128> Path) {
+ struct stat info;
+ if (stat(std::string(Path.str()).c_str(), &info) != 0)
+ errs() << "cannot access " << Path << "\n";
+ else if (info.st_mode & S_IFDIR) {
+ std::error_code EC;
+ struct stat StatBuf;
+ // Walk all of the files within this directory.
+ for (llvm::sys::fs::directory_iterator File(Path, EC), FileEnd;
+ File != FileEnd && !EC; File.increment(EC)) {
+ if (stat(File->path().c_str(), &StatBuf))
+ continue;
+ // If we have a directory, look inside.
+ if (llvm::sys::fs::is_directory(File->path())) {
+ walk((SmallString<128>)File->path());
+ continue;
+ }
+ SourceFiles.push_back(File->path().c_str());
+ }
+ } else
+ SourceFiles.push_back(Path.str());
+ return;
+}
+
int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
// Print a stack trace if we signal out.
sys::PrintStackTraceOnErrorSignal();
@@ -362,7 +391,7 @@
errs() << "error: " << File << ": " << EC.message();
return 1;
}
- SourceFiles.push_back(Path.str());
+ walk(Path);
}
return 0;
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20803.59014.patch
Type: text/x-patch
Size: 1971 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160531/12652ef2/attachment.bin>
More information about the llvm-commits
mailing list