diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Source/CTest/cmCTestScriptHandler.cxx | 2 | ||||
-rw-r--r-- | Source/CTest/cmCTestUpdateCommand.cxx | 48 | ||||
-rw-r--r-- | Source/CTest/cmCTestUpdateCommand.h | 80 | ||||
-rw-r--r-- | Source/CTest/cmCTestUpdateHandler.cxx | 12 | ||||
-rw-r--r-- | Source/cmCTest.cxx | 39 | ||||
-rw-r--r-- | Source/cmCTest.h | 13 |
7 files changed, 181 insertions, 14 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 8648efa..1a8804f 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -152,6 +152,7 @@ SET(CMTEST_SRCS ctest.cxx cmCTest.cxx CTest/cmCTestRunScriptCommand.cxx CTest/cmCTestSleepCommand.cxx CTest/cmCTestStartCommand.cxx + CTest/cmCTestUpdateCommand.cxx CTest/cmCTestMemCheckHandler.cxx ) diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx index ba396ba..5430619 100644 --- a/Source/CTest/cmCTestScriptHandler.cxx +++ b/Source/CTest/cmCTestScriptHandler.cxx @@ -46,6 +46,7 @@ #include "cmCTestRunScriptCommand.h" #include "cmCTestSleepCommand.h" #include "cmCTestStartCommand.h" +#include "cmCTestUpdateCommand.h" #define CTEST_INITIAL_CMAKE_OUTPUT_FILE_NAME "CTestInitialCMakeOutput.log" @@ -223,6 +224,7 @@ int cmCTestScriptHandler::ReadInScript(const std::string& total_script_arg) this->AddCTestCommand(new cmCTestEmptyBinaryDirectoryCommand); this->AddCTestCommand(new cmCTestSleepCommand); this->AddCTestCommand(new cmCTestStartCommand); + this->AddCTestCommand(new cmCTestUpdateCommand); // add the script arg if defined if (script_arg.size()) diff --git a/Source/CTest/cmCTestUpdateCommand.cxx b/Source/CTest/cmCTestUpdateCommand.cxx new file mode 100644 index 0000000..40f13f9 --- /dev/null +++ b/Source/CTest/cmCTestUpdateCommand.cxx @@ -0,0 +1,48 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "cmCTestUpdateCommand.h" + +#include "cmCTest.h" +#include "cmCTestGenericHandler.h" + +bool cmCTestUpdateCommand::InitialPass( + std::vector<std::string> const& args) +{ + if (args.size() != 2) + { + this->SetError("called with incorrect number of arguments"); + return false; + } + + const char* source_dir = args[0].c_str(); + const char* res_var = args[1].c_str(); + + cmCTestGenericHandler* handler = m_CTest->GetHandler("update"); + if ( !handler ) + { + this->SetError("internal CTest error. Cannot instantiate update handler"); + return false; + } + handler->SetOption("SourceDirectory", source_dir); + int res = handler->ProcessHandler(); + cmOStringStream str; + str << res; + m_Makefile->AddDefinition(res_var, str.str().c_str()); + return true; +} + + diff --git a/Source/CTest/cmCTestUpdateCommand.h b/Source/CTest/cmCTestUpdateCommand.h new file mode 100644 index 0000000..ace980e --- /dev/null +++ b/Source/CTest/cmCTestUpdateCommand.h @@ -0,0 +1,80 @@ +/*========================================================================= + + Program: CMake - Cross-Platform Makefile Generator + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef cmCTestUpdateCommand_h +#define cmCTestUpdateCommand_h + +#include "cmCTestCommand.h" + +/** \class cmCTestUpdate + * \brief Run a ctest script + * + * cmCTestUpdateCommand defineds the command to updates the repository. + */ +class cmCTestUpdateCommand : public cmCTestCommand +{ +public: + + cmCTestUpdateCommand() {} + + /** + * This is a virtual constructor for the command. + */ + virtual cmCommand* Clone() + { + cmCTestUpdateCommand* ni = new cmCTestUpdateCommand; + ni->m_CTest = this->m_CTest; + ni->m_CTestScriptHandler = this->m_CTestScriptHandler; + return ni; + } + + /** + * This is called when the command is first encountered in + * the CMakeLists.txt file. + */ + virtual bool InitialPass(std::vector<std::string> const& args); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() { return "CTEST_UPDATE";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() + { + return "Updates the repository."; + } + + /** + * More documentation. + */ + virtual const char* GetFullDocumentation() + { + return + " CTEST_UPDATE(source res)\n" + "Updates the given source directory and stores results in Update.xml. The " + "second argument is a variable that will hold the number of files " + "modified. If there is a problem, the variable will be -1."; + } + + cmTypeMacro(cmCTestUpdateCommand, cmCTestCommand); + +}; + + +#endif diff --git a/Source/CTest/cmCTestUpdateHandler.cxx b/Source/CTest/cmCTestUpdateHandler.cxx index 4956675..ffa9deb 100644 --- a/Source/CTest/cmCTestUpdateHandler.cxx +++ b/Source/CTest/cmCTestUpdateHandler.cxx @@ -207,14 +207,14 @@ int cmCTestUpdateHandler::ProcessHandler() // Get source dir - std::string sourceDirectory = m_CTest->GetDartConfiguration("SourceDirectory"); - if ( sourceDirectory.empty() ) + const char* sourceDirectory = this->GetOption("SourceDirectory"); + if ( !sourceDirectory ) { std::cerr << "Cannot find SourceDirectory key in the DartConfiguration.tcl" << std::endl; return -1; } - std::cout << "Updating the repository: " << sourceDirectory.c_str() << std::endl; + std::cout << "Updating the repository: " << sourceDirectory << std::endl; // Get update command std::string updateCommand = m_CTest->GetDartConfiguration("UpdateCommand"); @@ -324,7 +324,7 @@ int cmCTestUpdateHandler::ProcessHandler() if ( !m_CTest->GetShowOnly() ) { res = cmSystemTools::RunSingleCommand(command.c_str(), &goutput, - &retVal, sourceDirectory.c_str(), + &retVal, sourceDirectory, m_Verbose, 0 /*m_TimeOut*/); if ( ofs ) { @@ -382,7 +382,7 @@ int cmCTestUpdateHandler::ProcessHandler() if ( !m_CTest->GetShowOnly() ) { res = cmSystemTools::RunSingleCommand(command.c_str(), &goutput, - &retVal, sourceDirectory.c_str(), + &retVal, sourceDirectory, m_Verbose, 0 /*m_TimeOut*/); if ( ofs ) { @@ -505,7 +505,7 @@ int cmCTestUpdateHandler::ProcessHandler() std::cout << "* Get file update information: " << logcommand.c_str() << std::endl; } res = cmSystemTools::RunSingleCommand(logcommand.c_str(), &output, - &retVal, sourceDirectory.c_str(), + &retVal, sourceDirectory, m_Verbose, 0 /*m_TimeOut*/); if ( ofs ) { diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index 6d3dd26..56f912f 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -368,13 +368,19 @@ int cmCTest::Initialize(const char* binary_dir) return 1; } -void cmCTest::UpdateCTestConfiguration() +bool cmCTest::UpdateCTestConfiguration() { + std::string fileName = m_BinaryDir + "/DartConfiguration.tcl"; + if ( !cmSystemTools::FileExists(fileName.c_str()) ) + { + std::cerr << "Cannot find file: " << fileName.c_str() << std::endl; + return false; + } // parse the dart test file - std::ifstream fin("DartConfiguration.tcl"); + std::ifstream fin(fileName.c_str()); if(!fin) { - return; + return false; } char buffer[1024]; @@ -415,6 +421,7 @@ void cmCTest::UpdateCTestConfiguration() m_TimeOut = atoi(m_DartConfiguration["TimeOut"].c_str()); m_CompressXMLFiles = cmSystemTools::IsOn(m_DartConfiguration["CompressSubmission"].c_str()); } + return true; } void cmCTest::BlockTestErrorDiagnostics() @@ -710,7 +717,25 @@ std::string cmCTest::GetSubmitResultsPrefix() return name; } +cmCTestGenericHandler* cmCTest::GetHandler(const char* handler) +{ + cmCTest::t_TestingHandlers::iterator it = m_TestingHandlers.find(handler); + if ( it == m_TestingHandlers.end() ) + { + return 0; + } + return it->second; +} +int cmCTest::ExecuteHandler(const char* shandler) +{ + cmCTestGenericHandler* handler = this->GetHandler(shandler); + if ( !handler ) + { + return -1; + } + return handler->ProcessHandler(); +} int cmCTest::ProcessTests() { @@ -729,7 +754,9 @@ int cmCTest::ProcessTests() } if ( m_Tests[UPDATE_TEST] || m_Tests[ALL_TEST] ) { - update_count = m_TestingHandlers["update"]->ProcessHandler(); + cmCTestGenericHandler* uphandler = this->GetHandler("update"); + uphandler->SetOption("SourceDirectory", this->GetDartConfiguration("SourceDirectory").c_str()); + update_count = uphandler->ProcessHandler(); if ( update_count < 0 ) { res |= cmCTest::UPDATE_ERRORS; @@ -2223,8 +2250,8 @@ void cmCTest::PopulateCustomInteger(cmMakefile* mf, const char* def, int& val) std::string cmCTest::GetShortPathToFile(const char* cfname) { - const std::string& sourceDir = GetDartConfiguration("SourceDirectory"); - const std::string& buildDir = GetDartConfiguration("BuildDirectory"); + const std::string& sourceDir = this->GetDartConfiguration("SourceDirectory"); + const std::string& buildDir = this->GetDartConfiguration("BuildDirectory"); std::string fname = cmSystemTools::CollapseFullPath(cfname); // Find relative paths to both directories diff --git a/Source/cmCTest.h b/Source/cmCTest.h index 3674f01..7c4ffdd 100644 --- a/Source/cmCTest.h +++ b/Source/cmCTest.h @@ -181,8 +181,17 @@ public: int RunTest(std::vector<const char*> args, std::string* output, int *retVal, std::ostream* logfile); -private: + /** + * Execute handler and return its result. If the handler fails, it returns negative value. + */ + int ExecuteHandler(const char* handler); + /* + * Get the handler object + */ + cmCTestGenericHandler* GetHandler(const char* handler); + +private: std::string m_ConfigType; bool m_Verbose; bool m_ProduceXML; @@ -263,7 +272,7 @@ private: //! Reread the configuration file - void UpdateCTestConfiguration(); + bool UpdateCTestConfiguration(); //! Create not from files. int GenerateDartNotesOutput(std::ostream& os, const tm_VectorOfStrings& files); |