diff options
author | Brad King <brad.king@kitware.com> | 2009-02-24 17:49:57 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-02-24 17:49:57 (GMT) |
commit | 4e4f2a3a10327978c8de493fe0f411e656b7d2f9 (patch) | |
tree | 6131dc617f4a2c082923bb3287652de51acac64f /Source/CTest | |
parent | 1595b8e69eac0d2dbab6ac29663a85d8d486a5cc (diff) | |
download | CMake-4e4f2a3a10327978c8de493fe0f411e656b7d2f9.zip CMake-4e4f2a3a10327978c8de493fe0f411e656b7d2f9.tar.gz CMake-4e4f2a3a10327978c8de493fe0f411e656b7d2f9.tar.bz2 |
ENH: Create cmCTestVC::RunChild and parse helpers
This method will help VCS tool subclasses run child processes and log
the output while parsing it.
Diffstat (limited to 'Source/CTest')
-rw-r--r-- | Source/CTest/cmCTestVC.cxx | 31 | ||||
-rw-r--r-- | Source/CTest/cmCTestVC.h | 11 |
2 files changed, 40 insertions, 2 deletions
diff --git a/Source/CTest/cmCTestVC.cxx b/Source/CTest/cmCTestVC.cxx index 2bacda6..9d9a191 100644 --- a/Source/CTest/cmCTestVC.cxx +++ b/Source/CTest/cmCTestVC.cxx @@ -18,6 +18,8 @@ #include "cmCTest.h" +#include <cmsys/Process.h> + //---------------------------------------------------------------------------- cmCTestVC::cmCTestVC(cmCTest* ct, std::ostream& log): CTest(ct), Log(log) { @@ -39,3 +41,32 @@ void cmCTestVC::SetSourceDirectory(std::string const& dir) { this->SourceDirectory = dir; } + +//---------------------------------------------------------------------------- +bool cmCTestVC::RunChild(char const* const* cmd, OutputParser* out, + OutputParser* err, const char* workDir) +{ + this->Log << this->ComputeCommandLine(cmd) << "\n"; + + cmsysProcess* cp = cmsysProcess_New(); + cmsysProcess_SetCommand(cp, cmd); + workDir = workDir? workDir : this->SourceDirectory.c_str(); + cmsysProcess_SetWorkingDirectory(cp, workDir); + this->RunProcess(cp, out, err); + int result = cmsysProcess_GetExitValue(cp); + cmsysProcess_Delete(cp); + return result == 0; +} + +//---------------------------------------------------------------------------- +std::string cmCTestVC::ComputeCommandLine(char const* const* cmd) +{ + cmOStringStream line; + const char* sep = ""; + for(const char* const* arg = cmd; *arg; ++arg) + { + line << sep << "\"" << *arg << "\""; + sep = " "; + } + return line.str(); +} diff --git a/Source/CTest/cmCTestVC.h b/Source/CTest/cmCTestVC.h index b2f25e8..1bc4277 100644 --- a/Source/CTest/cmCTestVC.h +++ b/Source/CTest/cmCTestVC.h @@ -17,7 +17,7 @@ #ifndef cmCTestVC_h #define cmCTestVC_h -#include "cmStandardIncludes.h" +#include "cmProcessTools.h" class cmCTest; @@ -25,7 +25,7 @@ class cmCTest; * \brief Base class for version control system handlers * */ -class cmCTestVC +class cmCTestVC: public cmProcessTools { public: /** Construct with a CTest instance and update log stream. */ @@ -41,6 +41,13 @@ public: protected: + /** Convert a list of arguments to a human-readable command line. */ + static std::string ComputeCommandLine(char const* const* cmd); + + /** Run a command line and send output to given parsers. */ + bool RunChild(char const* const* cmd, OutputParser* out, + OutputParser* err, const char* workDir = 0); + // Instance of cmCTest running the script. cmCTest* CTest; |