[Cmake-commits] [cmake-commits] king committed cmCTestSVN.cxx 1.3 1.4 cmCTestSVN.h 1.3 1.4
cmake-commits at cmake.org
cmake-commits at cmake.org
Tue Feb 24 15:43:27 EST 2009
Update of /cvsroot/CMake/CMake/Source/CTest
In directory public:/mounts/ram/cvs-serv6505/Source/CTest
Modified Files:
cmCTestSVN.cxx cmCTestSVN.h
Log Message:
ENH: Teach cmCTestSVN to load repo/tree relation
This teaches cmCTestSVN::NoteNewRevision to save the repository URL
checked out in the work tree, the repository root, and the path below
the root to reach the full URL.
Index: cmCTestSVN.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CTest/cmCTestSVN.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C 2 -d -r1.3 -r1.4
*** cmCTestSVN.h 24 Feb 2009 17:52:36 -0000 1.3
--- cmCTestSVN.h 24 Feb 2009 20:43:25 -0000 1.4
***************
*** 44,47 ****
--- 44,56 ----
std::string NewRevision;
+ // URL of repository directory checked out in the working tree.
+ std::string URL;
+
+ // URL of repository root directory.
+ std::string Root;
+
+ // Directory under repository root checked out in working tree.
+ std::string Base;
+
std::string LoadInfo();
Index: cmCTestSVN.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/CTest/cmCTestSVN.cxx,v
retrieving revision 1.3
retrieving revision 1.4
diff -C 2 -d -r1.3 -r1.4
*** cmCTestSVN.cxx 24 Feb 2009 17:52:36 -0000 1.3
--- cmCTestSVN.cxx 24 Feb 2009 20:43:25 -0000 1.4
***************
*** 50,53 ****
--- 50,55 ----
this->SetLog(&svn->Log, prefix);
this->RegexRev.compile("^Revision: ([0-9]+)");
+ this->RegexURL.compile("^URL: +([^ ]+) *$");
+ this->RegexRoot.compile("^Repository Root: +([^ ]+) *$");
}
private:
***************
*** 55,58 ****
--- 57,62 ----
std::string& Rev;
cmsys::RegularExpression RegexRev;
+ cmsys::RegularExpression RegexURL;
+ cmsys::RegularExpression RegexRoot;
virtual bool ProcessLine()
{
***************
*** 61,64 ****
--- 65,76 ----
this->Rev = this->RegexRev.match(1);
}
+ else if(this->RegexURL.find(this->Line))
+ {
+ this->SVN->URL = this->RegexURL.match(1);
+ }
+ else if(this->RegexRoot.find(this->Line))
+ {
+ this->SVN->Root = this->RegexRoot.match(1);
+ }
return true;
}
***************
*** 66,69 ****
--- 78,99 ----
//----------------------------------------------------------------------------
+ static bool cmCTestSVNPathStarts(std::string const& p1, std::string const& p2)
+ {
+ // Does path p1 start with path p2?
+ if(p1.size() == p2.size())
+ {
+ return p1 == p2;
+ }
+ else if(p1.size() > p2.size() && p1[p2.size()] == '/')
+ {
+ return strncmp(p1.c_str(), p2.c_str(), p2.size()) == 0;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ //----------------------------------------------------------------------------
std::string cmCTestSVN::LoadInfo()
{
***************
*** 94,96 ****
--- 124,138 ----
cmCTestLog(this->CTest, HANDLER_OUTPUT, " New revision of repository is: "
<< this->NewRevision << "\n");
+
+ this->Log << "URL = " << this->URL << "\n";
+ this->Log << "Root = " << this->Root << "\n";
+
+ // Compute the base path the working tree has checked out under
+ // the repository root.
+ if(!this->Root.empty() && cmCTestSVNPathStarts(this->URL, this->Root))
+ {
+ this->Base = cmCTest::DecodeURL(this->URL.substr(this->Root.size()));
+ this->Base += "/";
+ }
+ this->Log << "Base = " << this->Base << "\n";
}
More information about the Cmake-commits
mailing list