cmCTestGIT: add an option to initialize submodules on update

Currently, CTest will not initialize any submodules within the already
checked out source tree. Add an option to do so. The use case for not
doing so is that some submodules may not be necessary for the current
test and keeping network usage down may be important.
This commit is contained in:
Ben Boeckel 2016-03-31 12:28:46 -04:00 committed by Brad King
parent 56c1ea40c5
commit 06b310b5d5
6 changed files with 33 additions and 1 deletions

View File

@ -407,6 +407,7 @@ Variables for CTest
/variable/CTEST_DROP_SITE_USER /variable/CTEST_DROP_SITE_USER
/variable/CTEST_EXTRA_COVERAGE_GLOB /variable/CTEST_EXTRA_COVERAGE_GLOB
/variable/CTEST_GIT_COMMAND /variable/CTEST_GIT_COMMAND
/variable/CTEST_GIT_INIT_SUBMODULES
/variable/CTEST_GIT_UPDATE_CUSTOM /variable/CTEST_GIT_UPDATE_CUSTOM
/variable/CTEST_GIT_UPDATE_OPTIONS /variable/CTEST_GIT_UPDATE_OPTIONS
/variable/CTEST_HG_COMMAND /variable/CTEST_HG_COMMAND

View File

@ -589,6 +589,12 @@ Configuration settings to specify the version control tool include:
* `CTest Script`_ variable: :variable:`CTEST_GIT_COMMAND` * `CTest Script`_ variable: :variable:`CTEST_GIT_COMMAND`
* :module:`CTest` module variable: ``GITCOMMAND`` * :module:`CTest` module variable: ``GITCOMMAND``
``GITInitSubmodules``
If set, CTest will update the repository's submodules before updating.
* `CTest Script`_ variable: :variable:`CTEST_GIT_INIT_SUBMODULES`
* :module:`CTest` module variable: ``CTEST_GIT_INIT_SUBMODULES``
``GITUpdateCustom`` ``GITUpdateCustom``
Specify a custom command line (as a semicolon-separated list) to run Specify a custom command line (as a semicolon-separated list) to run
in the source tree (Git work tree) to update it instead of running in the source tree (Git work tree) to update it instead of running

View File

@ -0,0 +1,5 @@
CTEST_GIT_INIT_SUBMODULES
-------------------------
Specify the CTest ``GITInitSubmodules`` setting
in a :manual:`ctest(1)` dashboard client script.

View File

@ -52,6 +52,7 @@ SVNUpdateOptions: @SVN_UPDATE_OPTIONS@
# Git options # Git options
GITCommand: @GITCOMMAND@ GITCommand: @GITCOMMAND@
GITInitSubmodules: @CTEST_GIT_INIT_SUBMODULES@
GITUpdateOptions: @GIT_UPDATE_OPTIONS@ GITUpdateOptions: @GIT_UPDATE_OPTIONS@
GITUpdateCustom: @CTEST_GIT_UPDATE_CUSTOM@ GITUpdateCustom: @CTEST_GIT_UPDATE_CUSTOM@

View File

@ -285,9 +285,26 @@ bool cmCTestGIT::UpdateImpl()
} }
} }
char const* git_submodule[] = {git, "submodule", "update", recursive, 0};
OutputLogger submodule_out(this->Log, "submodule-out> "); OutputLogger submodule_out(this->Log, "submodule-out> ");
OutputLogger submodule_err(this->Log, "submodule-err> "); OutputLogger submodule_err(this->Log, "submodule-err> ");
bool ret;
std::string init_submodules =
this->CTest->GetCTestConfiguration("GITInitSubmodules");
if (cmSystemTools::IsOn(init_submodules.c_str()))
{
char const* git_submodule_init[] = {git, "submodule", "init", 0};
ret = this->RunChild(git_submodule_init, &submodule_out, &submodule_err,
top_dir.c_str());
if (!ret)
{
return false;
}
}
char const* git_submodule[] = {git, "submodule", "update", recursive, 0};
return this->RunChild(git_submodule, &submodule_out, &submodule_err, return this->RunChild(git_submodule, &submodule_out, &submodule_err,
top_dir.c_str()); top_dir.c_str());
} }

View File

@ -54,6 +54,8 @@ cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler()
"GITCommand", "CTEST_GIT_COMMAND", this->Quiet); "GITCommand", "CTEST_GIT_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS", this->Quiet); "GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITInitSubmodules", "CTEST_GIT_INIT_SUBMODULES", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM", this->Quiet); "GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,