cmCTest*Command: Direct use of cmExecutionStatus

Make sure that getting Makefile and setting Error is both done
through a `status` argument rather than through `cmCommand`.
This commit is contained in:
Daniel Pfeifer
2024-10-30 22:20:18 +01:00
parent 26a697f7c1
commit 0e995d4897
22 changed files with 125 additions and 102 deletions
+7 -7
View File
@@ -13,6 +13,7 @@
#include "cmCTestBuildHandler.h" #include "cmCTestBuildHandler.h"
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmMessageType.h" #include "cmMessageType.h"
@@ -21,8 +22,6 @@
#include "cmValue.h" #include "cmValue.h"
#include "cmake.h" #include "cmake.h"
class cmExecutionStatus;
std::unique_ptr<cmCommand> cmCTestBuildCommand::Clone() std::unique_ptr<cmCommand> cmCTestBuildCommand::Clone()
{ {
auto ni = cm::make_unique<cmCTestBuildCommand>(); auto ni = cm::make_unique<cmCTestBuildCommand>();
@@ -49,9 +48,9 @@ bool cmCTestBuildCommand::InitialPass(std::vector<std::string> const& args,
} }
std::unique_ptr<cmCTestGenericHandler> cmCTestBuildCommand::InitializeHandler( std::unique_ptr<cmCTestGenericHandler> cmCTestBuildCommand::InitializeHandler(
HandlerArguments& arguments) HandlerArguments& arguments, cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<BuildArguments&>(arguments); auto const& args = static_cast<BuildArguments&>(arguments);
auto handler = cm::make_unique<cmCTestBuildHandler>(this->CTest); auto handler = cm::make_unique<cmCTestBuildHandler>(this->CTest);
@@ -116,7 +115,7 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestBuildCommand::InitializeHandler(
"is set. Otherwise, set CTEST_BUILD_COMMAND to build the project " "is set. Otherwise, set CTEST_BUILD_COMMAND to build the project "
"with a custom command line."; "with a custom command line.";
/* clang-format on */ /* clang-format on */
this->SetError(ostr.str()); status.SetError(ostr.str());
return nullptr; return nullptr;
} }
} }
@@ -137,9 +136,10 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestBuildCommand::InitializeHandler(
} }
void cmCTestBuildCommand::ProcessAdditionalValues( void cmCTestBuildCommand::ProcessAdditionalValues(
cmCTestGenericHandler* generic, HandlerArguments const& arguments) cmCTestGenericHandler* generic, HandlerArguments const& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<BuildArguments const&>(arguments); auto const& args = static_cast<BuildArguments const&>(arguments);
auto const* handler = static_cast<cmCTestBuildHandler*>(generic); auto const* handler = static_cast<cmCTestBuildHandler*>(generic);
if (!args.NumberErrors.empty()) { if (!args.NumberErrors.empty()) {
+3 -2
View File
@@ -37,10 +37,11 @@ private:
std::string GetName() const override { return "ctest_build"; } std::string GetName() const override { return "ctest_build"; }
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
void ProcessAdditionalValues(cmCTestGenericHandler* handler, void ProcessAdditionalValues(cmCTestGenericHandler* handler,
HandlerArguments const& arguments) override; HandlerArguments const& arguments,
cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+8 -6
View File
@@ -15,6 +15,7 @@
#include "cmCTestConfigureHandler.h" #include "cmCTestConfigureHandler.h"
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmList.h" #include "cmList.h"
#include "cmMakefile.h" #include "cmMakefile.h"
@@ -31,9 +32,10 @@ std::unique_ptr<cmCommand> cmCTestConfigureCommand::Clone()
} }
std::unique_ptr<cmCTestGenericHandler> std::unique_ptr<cmCTestGenericHandler>
cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments) cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<ConfigureArguments&>(arguments); auto const& args = static_cast<ConfigureArguments&>(arguments);
cmList options; cmList options;
@@ -42,7 +44,7 @@ cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments)
} }
if (this->CTest->GetCTestConfiguration("BuildDirectory").empty()) { if (this->CTest->GetCTestConfiguration("BuildDirectory").empty()) {
this->SetError( status.SetError(
"Build directory not specified. Either use BUILD " "Build directory not specified. Either use BUILD "
"argument to CTEST_CONFIGURE command or set CTEST_BINARY_DIRECTORY " "argument to CTEST_CONFIGURE command or set CTEST_BINARY_DIRECTORY "
"variable"); "variable");
@@ -60,7 +62,7 @@ cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments)
const std::string& source_dir = const std::string& source_dir =
this->CTest->GetCTestConfiguration("SourceDirectory"); this->CTest->GetCTestConfiguration("SourceDirectory");
if (source_dir.empty()) { if (source_dir.empty()) {
this->SetError( status.SetError(
"Source directory not specified. Either use SOURCE " "Source directory not specified. Either use SOURCE "
"argument to CTEST_CONFIGURE command or set CTEST_SOURCE_DIRECTORY " "argument to CTEST_CONFIGURE command or set CTEST_SOURCE_DIRECTORY "
"variable"); "variable");
@@ -71,7 +73,7 @@ cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments)
if (!cmSystemTools::FileExists(cmakelists_file)) { if (!cmSystemTools::FileExists(cmakelists_file)) {
std::ostringstream e; std::ostringstream e;
e << "CMakeLists.txt file does not exist [" << cmakelists_file << "]"; e << "CMakeLists.txt file does not exist [" << cmakelists_file << "]";
this->SetError(e.str()); status.SetError(e.str());
return nullptr; return nullptr;
} }
@@ -142,7 +144,7 @@ cmCTestConfigureCommand::InitializeHandler(HandlerArguments& arguments)
this->CTest->SetCTestConfiguration("ConfigureCommand", this->CTest->SetCTestConfiguration("ConfigureCommand",
cmakeConfigureCommand, args.Quiet); cmakeConfigureCommand, args.Quiet);
} else { } else {
this->SetError( status.SetError(
"Configure command is not specified. If this is a " "Configure command is not specified. If this is a "
"\"built with CMake\" project, set CTEST_CMAKE_GENERATOR. If not, " "\"built with CMake\" project, set CTEST_CMAKE_GENERATOR. If not, "
"set CTEST_CONFIGURE_COMMAND."); "set CTEST_CONFIGURE_COMMAND.");
+1 -1
View File
@@ -31,7 +31,7 @@ private:
std::string GetName() const override { return "ctest_configure"; } std::string GetName() const override { return "ctest_configure"; }
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+4 -2
View File
@@ -13,6 +13,7 @@
#include "cmCTestCoverageHandler.h" #include "cmCTestCoverageHandler.h"
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
class cmMakefile; class cmMakefile;
@@ -24,9 +25,10 @@ std::unique_ptr<cmCommand> cmCTestCoverageCommand::Clone()
} }
std::unique_ptr<cmCTestGenericHandler> std::unique_ptr<cmCTestGenericHandler>
cmCTestCoverageCommand::InitializeHandler(HandlerArguments& arguments) cmCTestCoverageCommand::InitializeHandler(HandlerArguments& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto& args = static_cast<CoverageArguments&>(arguments); auto& args = static_cast<CoverageArguments&>(arguments);
this->CTest->SetCTestConfigurationFromCMakeVariable( this->CTest->SetCTestConfigurationFromCMakeVariable(
&mf, "CoverageCommand", "CTEST_COVERAGE_COMMAND", args.Quiet); &mf, "CoverageCommand", "CTEST_COVERAGE_COMMAND", args.Quiet);
+1 -1
View File
@@ -34,7 +34,7 @@ private:
std::string GetName() const override { return "ctest_coverage"; } std::string GetName() const override { return "ctest_coverage"; }
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+9 -7
View File
@@ -122,7 +122,7 @@ bool cmCTestHandlerCommand::ExecuteHandlerCommand(HandlerArguments& args,
cmMakefile& mf = status.GetMakefile(); cmMakefile& mf = status.GetMakefile();
// Process input arguments. // Process input arguments.
this->CheckArguments(args); this->CheckArguments(args, status);
// Set the config type of this ctest to the current value of the // Set the config type of this ctest to the current value of the
// CTEST_CONFIGURATION_TYPE script variable if it is defined. // CTEST_CONFIGURATION_TYPE script variable if it is defined.
@@ -166,7 +166,7 @@ bool cmCTestHandlerCommand::ExecuteHandlerCommand(HandlerArguments& args,
} }
cmCTestLog(this->CTest, DEBUG, "Initialize handler" << std::endl); cmCTestLog(this->CTest, DEBUG, "Initialize handler" << std::endl);
auto handler = this->InitializeHandler(args); auto handler = this->InitializeHandler(args, status);
if (!handler) { if (!handler) {
cmCTestLog(this->CTest, ERROR_MESSAGE, cmCTestLog(this->CTest, ERROR_MESSAGE,
"Cannot instantiate test handler " << this->GetName() "Cannot instantiate test handler " << this->GetName()
@@ -183,7 +183,7 @@ bool cmCTestHandlerCommand::ExecuteHandlerCommand(HandlerArguments& args,
cmWorkingDirectory workdir( cmWorkingDirectory workdir(
this->CTest->GetCTestConfiguration("BuildDirectory")); this->CTest->GetCTestConfiguration("BuildDirectory"));
if (workdir.Failed()) { if (workdir.Failed()) {
this->SetError(workdir.GetError()); status.SetError(workdir.GetError());
return false; return false;
} }
@@ -195,21 +195,23 @@ bool cmCTestHandlerCommand::ExecuteHandlerCommand(HandlerArguments& args,
if (!args.ReturnValue.empty()) { if (!args.ReturnValue.empty()) {
mf.AddDefinition(args.ReturnValue, std::to_string(res)); mf.AddDefinition(args.ReturnValue, std::to_string(res));
} }
this->ProcessAdditionalValues(handler.get(), args); this->ProcessAdditionalValues(handler.get(), args, status);
return true; return true;
} }
void cmCTestHandlerCommand::CheckArguments(HandlerArguments&) void cmCTestHandlerCommand::CheckArguments(HandlerArguments&,
cmExecutionStatus&)
{ {
} }
std::unique_ptr<cmCTestGenericHandler> std::unique_ptr<cmCTestGenericHandler>
cmCTestHandlerCommand::InitializeHandler(HandlerArguments&) cmCTestHandlerCommand::InitializeHandler(HandlerArguments&, cmExecutionStatus&)
{ {
return nullptr; return nullptr;
}; };
void cmCTestHandlerCommand::ProcessAdditionalValues(cmCTestGenericHandler*, void cmCTestHandlerCommand::ProcessAdditionalValues(cmCTestGenericHandler*,
HandlerArguments const&) HandlerArguments const&,
cmExecutionStatus&)
{ {
} }
+5 -3
View File
@@ -85,11 +85,13 @@ private:
virtual std::string GetName() const = 0; virtual std::string GetName() const = 0;
virtual void CheckArguments(HandlerArguments& arguments); virtual void CheckArguments(HandlerArguments& arguments,
cmExecutionStatus& status);
virtual std::unique_ptr<cmCTestGenericHandler> InitializeHandler( virtual std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments); HandlerArguments& arguments, cmExecutionStatus& status);
virtual void ProcessAdditionalValues(cmCTestGenericHandler*, virtual void ProcessAdditionalValues(cmCTestGenericHandler*,
HandlerArguments const& arguments); HandlerArguments const& arguments,
cmExecutionStatus& status);
}; };
+7 -4
View File
@@ -12,6 +12,7 @@
#include "cmCTestMemCheckHandler.h" #include "cmCTestMemCheckHandler.h"
#include "cmCTestTestHandler.h" #include "cmCTestTestHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
std::unique_ptr<cmCommand> cmCTestMemCheckCommand::Clone() std::unique_ptr<cmCommand> cmCTestMemCheckCommand::Clone()
@@ -22,9 +23,10 @@ std::unique_ptr<cmCommand> cmCTestMemCheckCommand::Clone()
} }
std::unique_ptr<cmCTestTestHandler> std::unique_ptr<cmCTestTestHandler>
cmCTestMemCheckCommand::InitializeActualHandler(HandlerArguments& args) cmCTestMemCheckCommand::InitializeActualHandler(HandlerArguments& args,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto handler = cm::make_unique<cmCTestMemCheckHandler>(this->CTest); auto handler = cm::make_unique<cmCTestMemCheckHandler>(this->CTest);
this->CTest->SetCTestConfigurationFromCMakeVariable( this->CTest->SetCTestConfigurationFromCMakeVariable(
@@ -46,9 +48,10 @@ cmCTestMemCheckCommand::InitializeActualHandler(HandlerArguments& args)
} }
void cmCTestMemCheckCommand::ProcessAdditionalValues( void cmCTestMemCheckCommand::ProcessAdditionalValues(
cmCTestGenericHandler* handler, HandlerArguments const& arguments) cmCTestGenericHandler* handler, HandlerArguments const& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<MemCheckArguments const&>(arguments); auto const& args = static_cast<MemCheckArguments const&>(arguments);
if (!args.DefectCount.empty()) { if (!args.DefectCount.empty()) {
mf.AddDefinition( mf.AddDefinition(
+3 -2
View File
@@ -32,10 +32,11 @@ private:
std::string GetName() const override { return "ctest_memcheck"; } std::string GetName() const override { return "ctest_memcheck"; }
std::unique_ptr<cmCTestTestHandler> InitializeActualHandler( std::unique_ptr<cmCTestTestHandler> InitializeActualHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
void ProcessAdditionalValues(cmCTestGenericHandler* handler, void ProcessAdditionalValues(cmCTestGenericHandler* handler,
HandlerArguments const& arguments) override; HandlerArguments const& arguments,
cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
@@ -3,19 +3,21 @@
#include "cmCTestReadCustomFilesCommand.h" #include "cmCTestReadCustomFilesCommand.h"
#include "cmCTest.h" #include "cmCTest.h"
#include "cmExecutionStatus.h"
class cmExecutionStatus; class cmMakefile;
bool cmCTestReadCustomFilesCommand::InitialPass( bool cmCTestReadCustomFilesCommand::InitialPass(
std::vector<std::string> const& args, cmExecutionStatus& /*unused*/) std::vector<std::string> const& args, cmExecutionStatus& status)
{ {
if (args.empty()) { if (args.empty()) {
this->SetError("called with incorrect number of arguments"); status.SetError("called with incorrect number of arguments");
return false; return false;
} }
cmMakefile& mf = status.GetMakefile();
for (std::string const& arg : args) { for (std::string const& arg : args) {
this->CTest->ReadCustomConfigurationFileTree(arg, this->Makefile); this->CTest->ReadCustomConfigurationFileTree(arg, &mf);
} }
return true; return true;
+4 -4
View File
@@ -15,6 +15,7 @@ bool cmCTestRunScriptCommand::InitialPass(std::vector<std::string> const& args,
return false; return false;
} }
cmMakefile& mf = status.GetMakefile();
bool np = false; bool np = false;
unsigned int i = 0; unsigned int i = 0;
if (args[i] == "NEW_PROCESS") { if (args[i] == "NEW_PROCESS") {
@@ -37,10 +38,9 @@ bool cmCTestRunScriptCommand::InitialPass(std::vector<std::string> const& args,
++i; ++i;
} else { } else {
int ret; int ret;
cmCTestScriptHandler::RunScript(this->CTest, this->Makefile, cmCTestScriptHandler::RunScript(
cmSystemTools::CollapseFullPath(args[i]), this->CTest, &mf, cmSystemTools::CollapseFullPath(args[i]), !np, &ret);
!np, &ret); mf.AddDefinition(returnVariable, std::to_string(ret));
this->Makefile->AddDefinition(returnVariable, std::to_string(ret));
} }
} }
return true; return true;
+29 -27
View File
@@ -7,19 +7,18 @@
#include "cmCTest.h" #include "cmCTest.h"
#include "cmCTestVC.h" #include "cmCTestVC.h"
#include "cmExecutionStatus.h"
#include "cmGeneratedFileStream.h" #include "cmGeneratedFileStream.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmValue.h" #include "cmValue.h"
class cmExecutionStatus;
bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args, bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& /*unused*/) cmExecutionStatus& status)
{ {
if (args.empty()) { if (args.empty()) {
this->SetError("called with incorrect number of arguments"); status.SetError("called with incorrect number of arguments");
return false; return false;
} }
@@ -37,7 +36,7 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
args[cnt] == "QUIET") { args[cnt] == "QUIET") {
std::ostringstream e; std::ostringstream e;
e << args[cnt - 1] << " argument missing group name"; e << args[cnt - 1] << " argument missing group name";
this->SetError(e.str()); status.SetError(e.str());
return false; return false;
} }
this->CTest->SetSpecificGroup(args[cnt].c_str()); this->CTest->SetSpecificGroup(args[cnt].c_str());
@@ -58,30 +57,33 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
bld_dir = cmValue(args[cnt]); bld_dir = cmValue(args[cnt]);
cnt++; cnt++;
} else { } else {
this->SetError("Too many arguments"); status.SetError("Too many arguments");
return false; return false;
} }
} }
cmMakefile& mf = status.GetMakefile();
if (!src_dir) { if (!src_dir) {
src_dir = this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY"); src_dir = mf.GetDefinition("CTEST_SOURCE_DIRECTORY");
} }
if (!bld_dir) { if (!bld_dir) {
bld_dir = this->Makefile->GetDefinition("CTEST_BINARY_DIRECTORY"); bld_dir = mf.GetDefinition("CTEST_BINARY_DIRECTORY");
} }
if (!src_dir) { if (!src_dir) {
this->SetError("source directory not specified. Specify source directory " status.SetError("source directory not specified. Specify source directory "
"as an argument or set CTEST_SOURCE_DIRECTORY"); "as an argument or set CTEST_SOURCE_DIRECTORY");
return false; return false;
} }
if (!bld_dir) { if (!bld_dir) {
this->SetError("binary directory not specified. Specify binary directory " status.SetError("binary directory not specified. Specify binary directory "
"as an argument or set CTEST_BINARY_DIRECTORY"); "as an argument or set CTEST_BINARY_DIRECTORY");
return false; return false;
} }
if (!smodel && !append) { if (!smodel && !append) {
this->SetError("no test model specified and APPEND not specified. Specify " status.SetError(
"either a test model or the APPEND argument"); "no test model specified and APPEND not specified. Specify "
"either a test model or the APPEND argument");
return false; return false;
} }
@@ -124,7 +126,7 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
} }
// Make sure the source directory exists. // Make sure the source directory exists.
if (!this->InitialCheckout(ofs, sourceDir)) { if (!this->InitialCheckout(ofs, sourceDir, status)) {
return false; return false;
} }
if (!cmSystemTools::FileIsDirectory(sourceDir)) { if (!cmSystemTools::FileIsDirectory(sourceDir)) {
@@ -133,7 +135,7 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
<< " " << sourceDir << "\n" << " " << sourceDir << "\n"
<< "which is not an existing directory. " << "which is not an existing directory. "
<< "Set CTEST_CHECKOUT_COMMAND to a command line to create it."; << "Set CTEST_CHECKOUT_COMMAND to a command line to create it.";
this->SetError(e.str()); status.SetError(e.str());
return false; return false;
} }
@@ -165,20 +167,20 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
cmCTestOptionalLog( cmCTestOptionalLog(
this->CTest, OUTPUT, this->CTest, OUTPUT,
" Reading ctest configuration file: " << fname << std::endl, quiet); " Reading ctest configuration file: " << fname << std::endl, quiet);
bool readit = this->Makefile->ReadDependentFile(fname); bool readit = mf.ReadDependentFile(fname);
if (!readit) { if (!readit) {
std::string m = cmStrCat("Could not find include file: ", fname); std::string m = cmStrCat("Could not find include file: ", fname);
this->SetError(m); status.SetError(m);
return false; return false;
} }
} }
this->CTest->SetCTestConfigurationFromCMakeVariable( this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "NightlyStartTime", "CTEST_NIGHTLY_START_TIME", quiet); &mf, "NightlyStartTime", "CTEST_NIGHTLY_START_TIME", quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, "Site", this->CTest->SetCTestConfigurationFromCMakeVariable(&mf, "Site",
"CTEST_SITE", quiet); "CTEST_SITE", quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable( this->CTest->SetCTestConfigurationFromCMakeVariable(
this->Makefile, "BuildName", "CTEST_BUILD_NAME", quiet); &mf, "BuildName", "CTEST_BUILD_NAME", quiet);
this->CTest->Initialize(bld_dir); this->CTest->Initialize(bld_dir);
this->CTest->UpdateCTestConfiguration(); this->CTest->UpdateCTestConfiguration();
@@ -203,7 +205,7 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
return false; return false;
} }
this->CTest->ReadCustomConfigurationFileTree(bld_dir, this->Makefile); this->CTest->ReadCustomConfigurationFileTree(bld_dir, &mf);
if (append) { if (append) {
if (!this->CTest->ReadExistingTag(quiet)) { if (!this->CTest->ReadExistingTag(quiet)) {
@@ -223,14 +225,14 @@ bool cmCTestStartCommand::InitialPass(std::vector<std::string> const& args,
} }
bool cmCTestStartCommand::InitialCheckout(std::ostream& ofs, bool cmCTestStartCommand::InitialCheckout(std::ostream& ofs,
std::string const& sourceDir) std::string const& sourceDir,
cmExecutionStatus& status)
{ {
cmMakefile& mf = status.GetMakefile();
// Use the user-provided command to create the source tree. // Use the user-provided command to create the source tree.
cmValue initialCheckoutCommand = cmValue initialCheckoutCommand = mf.GetDefinition("CTEST_CHECKOUT_COMMAND");
this->Makefile->GetDefinition("CTEST_CHECKOUT_COMMAND");
if (!initialCheckoutCommand) { if (!initialCheckoutCommand) {
initialCheckoutCommand = initialCheckoutCommand = mf.GetDefinition("CTEST_CVS_CHECKOUT");
this->Makefile->GetDefinition("CTEST_CVS_CHECKOUT");
} }
if (initialCheckoutCommand) { if (initialCheckoutCommand) {
// Use a generic VC object to run and log the command. // Use a generic VC object to run and log the command.
+2 -1
View File
@@ -42,5 +42,6 @@ public:
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
private: private:
bool InitialCheckout(std::ostream& ofs, std::string const& sourceDir); bool InitialCheckout(std::ostream& ofs, std::string const& sourceDir,
cmExecutionStatus& status);
}; };
+10 -9
View File
@@ -15,6 +15,7 @@
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCTestSubmitHandler.h" #include "cmCTestSubmitHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmList.h" #include "cmList.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmMessageType.h" #include "cmMessageType.h"
@@ -22,8 +23,6 @@
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmValue.h" #include "cmValue.h"
class cmExecutionStatus;
std::unique_ptr<cmCommand> cmCTestSubmitCommand::Clone() std::unique_ptr<cmCommand> cmCTestSubmitCommand::Clone()
{ {
auto ni = cm::make_unique<cmCTestSubmitCommand>(); auto ni = cm::make_unique<cmCTestSubmitCommand>();
@@ -32,9 +31,9 @@ std::unique_ptr<cmCommand> cmCTestSubmitCommand::Clone()
} }
std::unique_ptr<cmCTestGenericHandler> cmCTestSubmitCommand::InitializeHandler( std::unique_ptr<cmCTestGenericHandler> cmCTestSubmitCommand::InitializeHandler(
HandlerArguments& arguments) HandlerArguments& arguments, cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<SubmitArguments&>(arguments); auto const& args = static_cast<SubmitArguments&>(arguments);
cmValue submitURL = !args.SubmitURL.empty() cmValue submitURL = !args.SubmitURL.empty()
? cmValue(args.SubmitURL) ? cmValue(args.SubmitURL)
@@ -113,7 +112,7 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestSubmitCommand::InitializeHandler(
if (extraFilesVariable) { if (extraFilesVariable) {
cmList extraFiles{ *extraFilesVariable }; cmList extraFiles{ *extraFilesVariable };
if (!this->CTest->SubmitExtraFiles(extraFiles)) { if (!this->CTest->SubmitExtraFiles(extraFiles)) {
this->SetError("problem submitting extra files."); status.SetError("problem submitting extra files.");
return nullptr; return nullptr;
} }
} }
@@ -208,9 +207,10 @@ bool cmCTestSubmitCommand::InitialPass(std::vector<std::string> const& args,
}); });
} }
void cmCTestSubmitCommand::CheckArguments(HandlerArguments& arguments) void cmCTestSubmitCommand::CheckArguments(HandlerArguments& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto& args = static_cast<SubmitArguments&>(arguments); auto& args = static_cast<SubmitArguments&>(arguments);
if (args.Parts) { if (args.Parts) {
cm::erase_if(*(args.Parts), [this, &mf](std::string const& arg) -> bool { cm::erase_if(*(args.Parts), [this, &mf](std::string const& arg) -> bool {
@@ -240,9 +240,10 @@ void cmCTestSubmitCommand::CheckArguments(HandlerArguments& arguments)
} }
void cmCTestSubmitCommand::ProcessAdditionalValues( void cmCTestSubmitCommand::ProcessAdditionalValues(
cmCTestGenericHandler*, HandlerArguments const& arguments) cmCTestGenericHandler*, HandlerArguments const& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto const& args = static_cast<SubmitArguments const&>(arguments); auto const& args = static_cast<SubmitArguments const&>(arguments);
if (!args.BuildID.empty()) { if (!args.BuildID.empty()) {
mf.AddDefinition(args.BuildID, this->CTest->GetBuildID()); mf.AddDefinition(args.BuildID, this->CTest->GetBuildID());
+5 -3
View File
@@ -45,13 +45,15 @@ private:
std::string GetName() const override { return "ctest_submit"; } std::string GetName() const override { return "ctest_submit"; }
void CheckArguments(HandlerArguments& arguments) override; void CheckArguments(HandlerArguments& arguments,
cmExecutionStatus& status) override;
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
void ProcessAdditionalValues(cmCTestGenericHandler* handler, void ProcessAdditionalValues(cmCTestGenericHandler* handler,
HandlerArguments const& arguments) override; HandlerArguments const& arguments,
cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+6 -6
View File
@@ -16,12 +16,11 @@
#include "cmCTestTestHandler.h" #include "cmCTestTestHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmDuration.h" #include "cmDuration.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmValue.h" #include "cmValue.h"
class cmExecutionStatus;
std::unique_ptr<cmCommand> cmCTestTestCommand::Clone() std::unique_ptr<cmCommand> cmCTestTestCommand::Clone()
{ {
auto ni = cm::make_unique<cmCTestTestCommand>(); auto ni = cm::make_unique<cmCTestTestCommand>();
@@ -30,9 +29,9 @@ std::unique_ptr<cmCommand> cmCTestTestCommand::Clone()
} }
std::unique_ptr<cmCTestGenericHandler> cmCTestTestCommand::InitializeHandler( std::unique_ptr<cmCTestGenericHandler> cmCTestTestCommand::InitializeHandler(
HandlerArguments& arguments) HandlerArguments& arguments, cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto& args = static_cast<TestArguments&>(arguments); auto& args = static_cast<TestArguments&>(arguments);
cmValue ctestTimeout = mf.GetDefinition("CTEST_TEST_TIMEOUT"); cmValue ctestTimeout = mf.GetDefinition("CTEST_TEST_TIMEOUT");
@@ -53,7 +52,7 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestTestCommand::InitializeHandler(
args.ResourceSpecFile = *resourceSpecFile; args.ResourceSpecFile = *resourceSpecFile;
} }
auto handler = this->InitializeActualHandler(args); auto handler = this->InitializeActualHandler(args, status);
if (!args.Start.empty() || !args.End.empty() || !args.Stride.empty()) { if (!args.Start.empty() || !args.End.empty() || !args.Stride.empty()) {
handler->TestOptions.TestsToRunInformation = handler->TestOptions.TestsToRunInformation =
cmStrCat(args.Start, ',', args.End, ',', args.Stride); cmStrCat(args.Start, ',', args.End, ',', args.Stride);
@@ -148,7 +147,8 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestTestCommand::InitializeHandler(
} }
std::unique_ptr<cmCTestTestHandler> std::unique_ptr<cmCTestTestHandler>
cmCTestTestCommand::InitializeActualHandler(HandlerArguments&) cmCTestTestCommand::InitializeActualHandler(HandlerArguments&,
cmExecutionStatus&)
{ {
return cm::make_unique<cmCTestTestHandler>(this->CTest); return cm::make_unique<cmCTestTestHandler>(this->CTest);
} }
+2 -2
View File
@@ -84,10 +84,10 @@ private:
std::string GetName() const override { return "ctest_test"; } std::string GetName() const override { return "ctest_test"; }
virtual std::unique_ptr<cmCTestTestHandler> InitializeActualHandler( virtual std::unique_ptr<cmCTestTestHandler> InitializeActualHandler(
HandlerArguments& arguments); HandlerArguments& arguments, cmExecutionStatus& status);
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+4 -3
View File
@@ -10,6 +10,7 @@
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCTestUpdateHandler.h" #include "cmCTestUpdateHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
@@ -21,9 +22,9 @@ std::unique_ptr<cmCommand> cmCTestUpdateCommand::Clone()
} }
std::unique_ptr<cmCTestGenericHandler> cmCTestUpdateCommand::InitializeHandler( std::unique_ptr<cmCTestGenericHandler> cmCTestUpdateCommand::InitializeHandler(
HandlerArguments& args) HandlerArguments& args, cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
if (!args.Source.empty()) { if (!args.Source.empty()) {
this->CTest->SetCTestConfiguration( this->CTest->SetCTestConfiguration(
"SourceDirectory", cmSystemTools::CollapseFullPath(args.Source), "SourceDirectory", cmSystemTools::CollapseFullPath(args.Source),
@@ -83,7 +84,7 @@ std::unique_ptr<cmCTestGenericHandler> cmCTestUpdateCommand::InitializeHandler(
auto handler = cm::make_unique<cmCTestUpdateHandler>(this->CTest); auto handler = cm::make_unique<cmCTestUpdateHandler>(this->CTest);
if (source_dir.empty()) { if (source_dir.empty()) {
this->SetError("source directory not specified. Please use SOURCE tag"); status.SetError("source directory not specified. Please use SOURCE tag");
return nullptr; return nullptr;
} }
handler->SourceDirectory = source_dir; handler->SourceDirectory = source_dir;
+1 -1
View File
@@ -25,7 +25,7 @@ private:
std::string GetName() const override { return "ctest_update"; } std::string GetName() const override { return "ctest_update"; }
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& args) override; HandlerArguments& args, cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;
+5 -5
View File
@@ -14,12 +14,11 @@
#include "cmCTestGenericHandler.h" #include "cmCTestGenericHandler.h"
#include "cmCTestUploadHandler.h" #include "cmCTestUploadHandler.h"
#include "cmCommand.h" #include "cmCommand.h"
#include "cmExecutionStatus.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmMessageType.h" #include "cmMessageType.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
class cmExecutionStatus;
std::unique_ptr<cmCommand> cmCTestUploadCommand::Clone() std::unique_ptr<cmCommand> cmCTestUploadCommand::Clone()
{ {
auto ni = cm::make_unique<cmCTestUploadCommand>(); auto ni = cm::make_unique<cmCTestUploadCommand>();
@@ -27,9 +26,10 @@ std::unique_ptr<cmCommand> cmCTestUploadCommand::Clone()
return std::unique_ptr<cmCommand>(std::move(ni)); return std::unique_ptr<cmCommand>(std::move(ni));
} }
void cmCTestUploadCommand::CheckArguments(HandlerArguments& arguments) void cmCTestUploadCommand::CheckArguments(HandlerArguments& arguments,
cmExecutionStatus& status)
{ {
cmMakefile& mf = *this->Makefile; cmMakefile& mf = status.GetMakefile();
auto& args = static_cast<UploadArguments&>(arguments); auto& args = static_cast<UploadArguments&>(arguments);
cm::erase_if(args.Files, [&mf](std::string const& arg) -> bool { cm::erase_if(args.Files, [&mf](std::string const& arg) -> bool {
if (!cmSystemTools::FileExists(arg)) { if (!cmSystemTools::FileExists(arg)) {
@@ -44,7 +44,7 @@ void cmCTestUploadCommand::CheckArguments(HandlerArguments& arguments)
} }
std::unique_ptr<cmCTestGenericHandler> cmCTestUploadCommand::InitializeHandler( std::unique_ptr<cmCTestGenericHandler> cmCTestUploadCommand::InitializeHandler(
HandlerArguments& arguments) HandlerArguments& arguments, cmExecutionStatus&)
{ {
auto const& args = static_cast<UploadArguments&>(arguments); auto const& args = static_cast<UploadArguments&>(arguments);
auto handler = cm::make_unique<cmCTestUploadHandler>(this->CTest); auto handler = cm::make_unique<cmCTestUploadHandler>(this->CTest);
+3 -2
View File
@@ -31,10 +31,11 @@ private:
std::string GetName() const override { return "ctest_upload"; } std::string GetName() const override { return "ctest_upload"; }
void CheckArguments(HandlerArguments& arguments) override; void CheckArguments(HandlerArguments& arguments,
cmExecutionStatus& status) override;
std::unique_ptr<cmCTestGenericHandler> InitializeHandler( std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
HandlerArguments& arguments) override; HandlerArguments& arguments, cmExecutionStatus& status) override;
bool InitialPass(std::vector<std::string> const& args, bool InitialPass(std::vector<std::string> const& args,
cmExecutionStatus& status) override; cmExecutionStatus& status) override;