|
|
@@ -49,21 +49,51 @@ public:
|
|
|
{
|
|
|
this->SetLog(&svn->Log, prefix);
|
|
|
this->RegexRev.compile("^Revision: ([0-9]+)");
|
|
|
+ this->RegexURL.compile("^URL: +([^ ]+) *$");
|
|
|
+ this->RegexRoot.compile("^Repository Root: +([^ ]+) *$");
|
|
|
}
|
|
|
private:
|
|
|
cmCTestSVN* SVN;
|
|
|
std::string& Rev;
|
|
|
cmsys::RegularExpression RegexRev;
|
|
|
+ cmsys::RegularExpression RegexURL;
|
|
|
+ cmsys::RegularExpression RegexRoot;
|
|
|
virtual bool ProcessLine()
|
|
|
{
|
|
|
if(this->RegexRev.find(this->Line))
|
|
|
{
|
|
|
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;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+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()
|
|
|
{
|
|
|
@@ -93,4 +123,16 @@ void cmCTestSVN::NoteNewRevision()
|
|
|
this->Log << "Revision after update: " << this->NewRevision << "\n";
|
|
|
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";
|
|
|
}
|