summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestSVN.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-02-24 17:52:36 (GMT)
committerBrad King <brad.king@kitware.com>2009-02-24 17:52:36 (GMT)
commitde3dedb4ea68f96deda8f4f1c97ab4f134b89f82 (patch)
tree645508549bd1fa19dacdebb8e4bf64c2839974ed /Source/CTest/cmCTestSVN.cxx
parentd76bc78a1247d0ac5d151a510b8d6ba231daa043 (diff)
downloadCMake-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.cxx59
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");
+}