diff options
author | Brad King <brad.king@kitware.com> | 2009-02-24 17:52:36 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-02-24 17:52:36 (GMT) |
commit | de3dedb4ea68f96deda8f4f1c97ab4f134b89f82 (patch) | |
tree | 645508549bd1fa19dacdebb8e4bf64c2839974ed /Source/CTest/cmCTestSVN.cxx | |
parent | d76bc78a1247d0ac5d151a510b8d6ba231daa043 (diff) | |
download | CMake-de3dedb4ea68f96deda8f4f1c97ab4f134b89f82.zip CMake-de3dedb4ea68f96deda8f4f1c97ab4f134b89f82.tar.gz CMake-de3dedb4ea68f96deda8f4f1c97ab4f134b89f82.tar.bz2 |
ENH: Factor out VCS work tree revision checks
This moves checks of the work tree revision before and after update from
cmCTestUpdateHandler::ProcessHandler into the cmCTestVC hierarchy.
Diffstat (limited to 'Source/CTest/cmCTestSVN.cxx')
-rw-r--r-- | Source/CTest/cmCTestSVN.cxx | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestSVN.cxx b/Source/CTest/cmCTestSVN.cxx index 9396404..c0e5ddc 100644 --- a/Source/CTest/cmCTestSVN.cxx +++ b/Source/CTest/cmCTestSVN.cxx @@ -16,6 +16,10 @@ =========================================================================*/ #include "cmCTestSVN.h" +#include "cmCTest.h" + +#include <cmsys/RegularExpression.hxx> + //---------------------------------------------------------------------------- cmCTestSVN::cmCTestSVN(cmCTest* ct, std::ostream& log): cmCTestVC(ct, log) { @@ -35,3 +39,58 @@ void cmCTestSVN::CleanupImpl() OutputLogger err(this->Log, "cleanup-err> "); this->RunChild(svn_cleanup, &out, &err); } + +//---------------------------------------------------------------------------- +class cmCTestSVN::InfoParser: public cmCTestVC::LineParser +{ +public: + InfoParser(cmCTestSVN* svn, const char* prefix, std::string& rev): + SVN(svn), Rev(rev) + { + this->SetLog(&svn->Log, prefix); + this->RegexRev.compile("^Revision: ([0-9]+)"); + } +private: + cmCTestSVN* SVN; + std::string& Rev; + cmsys::RegularExpression RegexRev; + virtual bool ProcessLine() + { + if(this->RegexRev.find(this->Line)) + { + this->Rev = this->RegexRev.match(1); + } + return true; + } +}; + +//---------------------------------------------------------------------------- +std::string cmCTestSVN::LoadInfo() +{ + // Run "svn info" to get the repository info from the work tree. + const char* svn = this->CommandLineTool.c_str(); + const char* svn_info[] = {svn, "info", 0}; + std::string rev; + InfoParser out(this, "info-out> ", rev); + OutputLogger err(this->Log, "info-err> "); + this->RunChild(svn_info, &out, &err); + return rev; +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::NoteOldRevision() +{ + this->OldRevision = this->LoadInfo(); + this->Log << "Revision before update: " << this->OldRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " Old revision of repository is: " + << this->OldRevision << "\n"); +} + +//---------------------------------------------------------------------------- +void cmCTestSVN::NoteNewRevision() +{ + this->NewRevision = this->LoadInfo(); + this->Log << "Revision after update: " << this->NewRevision << "\n"; + cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: " + << this->NewRevision << "\n"); +} |