diff options
Diffstat (limited to 'Source/CTest/cmCTestStartCommand.cxx')
-rw-r--r-- | Source/CTest/cmCTestStartCommand.cxx | 101 |
1 files changed, 62 insertions, 39 deletions
diff --git a/Source/CTest/cmCTestStartCommand.cxx b/Source/CTest/cmCTestStartCommand.cxx index 01a874b45..fe684062d 100644 --- a/Source/CTest/cmCTestStartCommand.cxx +++ b/Source/CTest/cmCTestStartCommand.cxx @@ -2,15 +2,15 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCTestStartCommand.h" +#include <cstddef> +#include <sstream> + #include "cmCTest.h" #include "cmCTestVC.h" #include "cmGeneratedFileStream.h" #include "cmMakefile.h" #include "cmSystemTools.h" -#include <sstream> -#include <stddef.h> - class cmExecutionStatus; cmCTestStartCommand::cmCTestStartCommand() @@ -28,41 +28,43 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args, } size_t cnt = 0; - const char* smodel = args[cnt].c_str(); - const char* src_dir = CM_NULLPTR; - const char* bld_dir = CM_NULLPTR; - - cnt++; + const char* smodel = nullptr; + const char* src_dir = nullptr; + const char* bld_dir = nullptr; - this->CTest->SetSpecificTrack(CM_NULLPTR); - if (cnt < args.size() - 1) { - if (args[cnt] == "TRACK") { + while (cnt < args.size()) { + if (args[cnt] == "GROUP" || args[cnt] == "TRACK") { cnt++; - this->CTest->SetSpecificTrack(args[cnt].c_str()); + if (cnt >= args.size() || args[cnt] == "APPEND" || + args[cnt] == "QUIET") { + std::ostringstream e; + e << args[cnt - 1] << " argument missing group name"; + this->SetError(e.str()); + return false; + } + this->CTest->SetSpecificGroup(args[cnt].c_str()); cnt++; - } - } - - if (cnt < args.size()) { - if (args[cnt] == "APPEND") { + } else if (args[cnt] == "APPEND") { cnt++; this->CreateNewTag = false; - } - } - if (cnt < args.size()) { - if (args[cnt] == "QUIET") { + } else if (args[cnt] == "QUIET") { cnt++; this->Quiet = true; - } - } - - if (cnt < args.size()) { - src_dir = args[cnt].c_str(); - cnt++; - if (cnt < args.size()) { + } else if (!smodel) { + smodel = args[cnt].c_str(); + cnt++; + } else if (!src_dir) { + src_dir = args[cnt].c_str(); + cnt++; + } else if (!bld_dir) { bld_dir = args[cnt].c_str(); + cnt++; + } else { + this->SetError("Too many arguments"); + return false; } } + if (!src_dir) { src_dir = this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY"); } @@ -79,6 +81,11 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args, "as an argument or set CTEST_BINARY_DIRECTORY"); return false; } + if (!smodel && this->CreateNewTag) { + this->SetError("no test model specified and APPEND not specified. Specify " + "either a test model or the APPEND argument"); + return false; + } cmSystemTools::AddKeepPath(src_dir); cmSystemTools::AddKeepPath(bld_dir); @@ -92,20 +99,31 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args, this->CTest->SetCTestConfiguration("BuildDirectory", binaryDir.c_str(), this->Quiet); - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "Run dashboard with model " - << smodel << std::endl - << " Source directory: " << src_dir << std::endl - << " Build directory: " << bld_dir << std::endl, - this->Quiet); - const char* track = this->CTest->GetSpecificTrack(); - if (track) { + if (smodel) { + cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, + "Run dashboard with model " + << smodel << std::endl + << " Source directory: " << src_dir << std::endl + << " Build directory: " << bld_dir << std::endl, + this->Quiet); + } else { cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, - " Track: " << track << std::endl, this->Quiet); + "Run dashboard with " + "to-be-determined model" + << std::endl + << " Source directory: " << src_dir << std::endl + << " Build directory: " << bld_dir << std::endl, + this->Quiet); + } + const char* group = this->CTest->GetSpecificGroup(); + if (group) { + cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, + " Group: " << group << std::endl, this->Quiet); } // Log startup actions. std::string startLogFile = binaryDir + "/Testing/Temporary/LastStart.log"; - cmGeneratedFileStream ofs(startLogFile.c_str()); + cmGeneratedFileStream ofs(startLogFile); if (!ofs) { cmCTestLog(this->CTest, ERROR_MESSAGE, "Cannot create log file: LastStart.log" << std::endl); @@ -126,9 +144,14 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args, return false; } - this->Makefile->AddDefinition("CTEST_RUN_CURRENT_SCRIPT", "OFF"); + this->CTest->SetRunCurrentScript(false); this->CTest->SetSuppressUpdatingCTestConfiguration(true); - int model = this->CTest->GetTestModelFromString(smodel); + int model; + if (smodel) { + model = cmCTest::GetTestModelFromString(smodel); + } else { + model = cmCTest::UNKNOWN; + } this->CTest->SetTestModel(model); this->CTest->SetProduceXML(true); |