[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