Bladeren bron

ENH: Teach ctest_* to create appending XML files

This adds an APPEND option to the ctest_* commands which tells them to
put the Append="true" attribute in the Site element of their XML file.
Brad King 17 jaren geleden
bovenliggende
commit
cccac773ce

+ 1 - 1
Source/CTest/cmCTestBuildHandler.cxx

@@ -484,7 +484,7 @@ void cmCTestBuildHandler::GenerateDartBuildOutput(
   std::vector<cmCTestBuildErrorWarning> ew,
   double elapsed_build_time)
 {
-  this->CTest->StartXML(os);
+  this->CTest->StartXML(os, this->AppendXML);
   os << "<Build>\n"
      << "\t<StartDateTime>" << this->StartBuild << "</StartDateTime>\n"
      << "\t<StartBuildTime>" << 

+ 1 - 1
Source/CTest/cmCTestConfigureHandler.cxx

@@ -92,7 +92,7 @@ int cmCTestConfigureHandler::ProcessHandler()
 
     if ( os )
       {
-      this->CTest->StartXML(os);
+      this->CTest->StartXML(os, this->AppendXML);
       os << "<Configure>\n"
          << "\t<StartDateTime>" << start_time << "</StartDateTime>"
          << std::endl

+ 3 - 3
Source/CTest/cmCTestCoverageHandler.cxx

@@ -169,7 +169,7 @@ bool cmCTestCoverageHandler::StartCoverageLogFile(
     return false;
     }
   std::string local_start_time = this->CTest->CurrentTime();
-  this->CTest->StartXML(covLogFile);
+  this->CTest->StartXML(covLogFile, this->AppendXML);
   covLogFile << "<CoverageLog>" << std::endl
              << "\t<StartDateTime>" << local_start_time << "</StartDateTime>"
              << "\t<StartTime>" 
@@ -388,7 +388,7 @@ int cmCTestCoverageHandler::ProcessHandler()
     return -1;
     }
 
-  this->CTest->StartXML(covSumFile);
+  this->CTest->StartXML(covSumFile, this->AppendXML);
   // Produce output xml files
 
   covSumFile << "<Coverage>" << std::endl
@@ -1440,7 +1440,7 @@ int cmCTestCoverageHandler::RunBullseyeSourceSummary(
       "Cannot open coverage summary file." << std::endl);
     return 0;
     }
-  this->CTest->StartXML(covSumFile); 
+  this->CTest->StartXML(covSumFile, this->AppendXML);
   double elapsed_time_start = cmSystemTools::GetTime();
   std::string coverage_start_time = this->CTest->CurrentTime();
   covSumFile << "<Coverage>" << std::endl

+ 1 - 0
Source/CTest/cmCTestGenericHandler.cxx

@@ -26,6 +26,7 @@ cmCTestGenericHandler::cmCTestGenericHandler()
   this->HandlerVerbose = false;
   this->CTest = 0;
   this->SubmitIndex = 0;
+  this->AppendXML = false;
 }
 
 //----------------------------------------------------------------------

+ 3 - 0
Source/CTest/cmCTestGenericHandler.h

@@ -88,10 +88,13 @@ public:
   void SetSubmitIndex(int idx) { this->SubmitIndex = idx; }
   int GetSubmitIndex() { return this->SubmitIndex; }
 
+  void SetAppendXML(bool b) { this->AppendXML = b; }
+
 protected:
   bool StartResultingXML(const char* name, cmGeneratedFileStream& xofs);
   bool StartLogFile(const char* name, cmGeneratedFileStream& xofs);
 
+  bool AppendXML;
   bool HandlerVerbose;
   cmCTest *CTest;
   t_StringToString Options;

+ 11 - 0
Source/CTest/cmCTestHandlerCommand.cxx

@@ -33,6 +33,7 @@ cmCTestHandlerCommand::cmCTestHandlerCommand()
   this->Arguments[ct_BUILD] = "BUILD";
   this->Arguments[ct_SUBMIT_INDEX] = "SUBMIT_INDEX";
   this->Last = ct_LAST;
+  this->AppendXML = false;
 }
 
 bool cmCTestHandlerCommand
@@ -73,6 +74,8 @@ bool cmCTestHandlerCommand
     return false;
     }
 
+  handler->SetAppendXML(this->AppendXML);
+
   handler->PopulateCustomVectors(this->Makefile);
   if ( this->Values[ct_BUILD] )
     {
@@ -143,6 +146,14 @@ bool cmCTestHandlerCommand
 //----------------------------------------------------------------------------
 bool cmCTestHandlerCommand::CheckArgumentKeyword(std::string const& arg)
 {
+  // Look for non-value arguments common to all commands.
+  if(arg == "APPEND")
+    {
+    this->ArgumentDoing = ArgumentDoingNone;
+    this->AppendXML = true;
+    return true;
+    }
+
   // Check for a keyword in our argument/value table.
   for(unsigned int k=0; k < this->Arguments.size(); ++k)
     {

+ 2 - 0
Source/CTest/cmCTestHandlerCommand.h

@@ -66,6 +66,8 @@ protected:
   int ArgumentDoing;
   unsigned int ArgumentIndex;
 
+  bool AppendXML;
+
   std::string ReturnVariable;
   std::vector<const char*> Arguments;
   std::vector<const char*> Values;

+ 1 - 1
Source/CTest/cmCTestMemCheckHandler.cxx

@@ -287,7 +287,7 @@ void cmCTestMemCheckHandler::GenerateDartOutput(std::ostream& os)
     return;
     }
 
-  this->CTest->StartXML(os);
+  this->CTest->StartXML(os, this->AppendXML);
   os << "<DynamicAnalysis Checker=\"";
   switch ( this->MemoryTesterStyle )
     {

+ 1 - 1
Source/CTest/cmCTestTestHandler.cxx

@@ -1442,7 +1442,7 @@ void cmCTestTestHandler::GenerateDartOutput(std::ostream& os)
     return;
     }
 
-  this->CTest->StartXML(os);
+  this->CTest->StartXML(os, this->AppendXML);
   os << "<Testing>\n"
     << "\t<StartDateTime>" << this->StartTest << "</StartDateTime>\n"
     << "\t<StartTestTime>" << this->StartTestTime << "</StartTestTime>\n"

+ 2 - 1
Source/cmCTest.cxx

@@ -1269,7 +1269,7 @@ int cmCTest::RunTest(std::vector<const char*> argv,
 }
 
 //----------------------------------------------------------------------
-void cmCTest::StartXML(std::ostream& ostr)
+void cmCTest::StartXML(std::ostream& ostr, bool append)
 {
   if(this->CurrentTag.empty())
     {
@@ -1289,6 +1289,7 @@ void cmCTest::StartXML(std::ostream& ostr)
        << this->GetTestModelString() << "\"\n\tName=\""
        << this->GetCTestConfiguration("Site") << "\"\n\tGenerator=\"ctest"
        << cmVersion::GetCMakeVersion()  << "\"\n"
+       << (append? "\tAppend=\"true\"\n":"")
        << "\tOSName=\"" << info.GetOSName() << "\"\n"
        << "\tHostname=\"" << info.GetHostname() << "\"\n"
        << "\tOSRelease=\"" << info.GetOSRelease() << "\"\n"

+ 1 - 1
Source/cmCTest.h

@@ -199,7 +199,7 @@ public:
     int* retVal = 0, const char* dir = 0, double timeout = 0.0);
 
   //! Start CTest XML output file
-  void StartXML(std::ostream& ostr);
+  void StartXML(std::ostream& ostr, bool append);
 
   //! End CTest XML output file
   void EndXML(std::ostream& ostr);