ctest_update: Add QUIET option

This commit is contained in:
Zack Galbreath 2015-02-17 11:45:46 -05:00 committed by Brad King
parent 19d1a5599a
commit 645ad117e1
5 changed files with 89 additions and 40 deletions

View File

@ -5,9 +5,14 @@ Update the work tree from version control.
:: ::
ctest_update([SOURCE source] [RETURN_VALUE res]) ctest_update([SOURCE source] [RETURN_VALUE res] [QUIET])
Updates the given source directory and stores results in Update.xml. Updates the given source directory and stores results in Update.xml.
If no SOURCE is given, the CTEST_SOURCE_DIRECTORY variable is used. If no SOURCE is given, the CTEST_SOURCE_DIRECTORY variable is used.
The RETURN_VALUE option specifies a variable in which to store the The RETURN_VALUE option specifies a variable in which to store the
result, which is the number of files updated or -1 on error. result, which is the number of files updated or -1 on error.
If QUIET is specified then CTest will suppress most non-error
messages that it would have otherwise printed to the console.
CTest will still report the new revision of the repository
and any conflicting files that were found.

View File

@ -20,55 +20,56 @@ cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler()
{ {
this->CTest->SetCTestConfiguration("SourceDirectory", this->CTest->SetCTestConfiguration("SourceDirectory",
cmSystemTools::CollapseFullPath( cmSystemTools::CollapseFullPath(
this->Values[ct_SOURCE]).c_str()); this->Values[ct_SOURCE]).c_str(), this->Quiet);
} }
else else
{ {
this->CTest->SetCTestConfiguration("SourceDirectory", this->CTest->SetCTestConfiguration("SourceDirectory",
cmSystemTools::CollapseFullPath( cmSystemTools::CollapseFullPath(
this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str()); this->Makefile->GetDefinition("CTEST_SOURCE_DIRECTORY")).c_str(),
this->Quiet);
} }
std::string source_dir std::string source_dir
= this->CTest->GetCTestConfiguration("SourceDirectory"); = this->CTest->GetCTestConfiguration("SourceDirectory");
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"UpdateCommand", "CTEST_UPDATE_COMMAND"); "UpdateCommand", "CTEST_UPDATE_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"UpdateOptions", "CTEST_UPDATE_OPTIONS"); "UpdateOptions", "CTEST_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"CVSCommand", "CTEST_CVS_COMMAND"); "CVSCommand", "CTEST_CVS_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"CVSUpdateOptions", "CTEST_CVS_UPDATE_OPTIONS"); "CVSUpdateOptions", "CTEST_CVS_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"SVNCommand", "CTEST_SVN_COMMAND"); "SVNCommand", "CTEST_SVN_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"SVNUpdateOptions", "CTEST_SVN_UPDATE_OPTIONS"); "SVNUpdateOptions", "CTEST_SVN_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"SVNOptions", "CTEST_SVN_OPTIONS"); "SVNOptions", "CTEST_SVN_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"BZRCommand", "CTEST_BZR_COMMAND"); "BZRCommand", "CTEST_BZR_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"BZRUpdateOptions", "CTEST_BZR_UPDATE_OPTIONS"); "BZRUpdateOptions", "CTEST_BZR_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITCommand", "CTEST_GIT_COMMAND"); "GITCommand", "CTEST_GIT_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS"); "GITUpdateOptions", "CTEST_GIT_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM"); "GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"UpdateVersionOnly", "CTEST_UPDATE_VERSION_ONLY"); "UpdateVersionOnly", "CTEST_UPDATE_VERSION_ONLY", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"HGCommand", "CTEST_HG_COMMAND"); "HGCommand", "CTEST_HG_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"HGUpdateOptions", "CTEST_HG_UPDATE_OPTIONS"); "HGUpdateOptions", "CTEST_HG_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"P4Command", "CTEST_P4_COMMAND"); "P4Command", "CTEST_P4_COMMAND", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"P4UpdateOptions", "CTEST_P4_UPDATE_OPTIONS"); "P4UpdateOptions", "CTEST_P4_UPDATE_OPTIONS", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"P4Client", "CTEST_P4_CLIENT"); "P4Client", "CTEST_P4_CLIENT", this->Quiet);
this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile,
"P4Options", "CTEST_P4_OPTIONS"); "P4Options", "CTEST_P4_OPTIONS", this->Quiet);
cmCTestGenericHandler* handler cmCTestGenericHandler* handler
= this->CTest->GetInitializedHandler("update"); = this->CTest->GetInitializedHandler("update");
@ -84,6 +85,7 @@ cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler()
return 0; return 0;
} }
handler->SetOption("SourceDirectory", source_dir.c_str()); handler->SetOption("SourceDirectory", source_dir.c_str());
handler->SetQuiet(this->Quiet);
return handler; return handler;
} }

View File

@ -122,11 +122,13 @@ void cmCTestUpdateHandler::Initialize()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
int cmCTestUpdateHandler::DetermineType(const char* cmd, const char* type) int cmCTestUpdateHandler::DetermineType(const char* cmd, const char* type)
{ {
cmCTestLog(this->CTest, DEBUG, "Determine update type from command: " << cmd cmCTestOptionalLog(this->CTest, DEBUG,
<< " and type: " << type << std::endl); "Determine update type from command: " << cmd << " and type: " << type <<
std::endl, this->Quiet);
if ( type && *type ) if ( type && *type )
{ {
cmCTestLog(this->CTest, DEBUG, "Type specified: " << type << std::endl); cmCTestOptionalLog(this->CTest, DEBUG, "Type specified: " << type <<
std::endl, this->Quiet);
std::string stype = cmSystemTools::LowerCase(type); std::string stype = cmSystemTools::LowerCase(type);
if ( stype.find("cvs") != std::string::npos ) if ( stype.find("cvs") != std::string::npos )
{ {
@ -155,8 +157,8 @@ int cmCTestUpdateHandler::DetermineType(const char* cmd, const char* type)
} }
else else
{ {
cmCTestLog(this->CTest, DEBUG, "Type not specified, check command: " cmCTestOptionalLog(this->CTest, DEBUG,
<< cmd << std::endl); "Type not specified, check command: " << cmd << std::endl, this->Quiet);
std::string stype = cmSystemTools::LowerCase(cmd); std::string stype = cmSystemTools::LowerCase(cmd);
if ( stype.find("cvs") != std::string::npos ) if ( stype.find("cvs") != std::string::npos )
{ {
@ -211,18 +213,19 @@ int cmCTestUpdateHandler::ProcessHandler()
this->StartLogFile("Update", ofs); this->StartLogFile("Update", ofs);
} }
cmCTestLog(this->CTest, HANDLER_OUTPUT, " Updating the repository: " cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
<< sourceDirectory << std::endl); " Updating the repository: " << sourceDirectory << std::endl,
this->Quiet);
if(!this->SelectVCS()) if(!this->SelectVCS())
{ {
return -1; return -1;
} }
cmCTestLog(this->CTest, HANDLER_OUTPUT, " Use " cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, " Use "
<< cmCTestUpdateHandlerUpdateToString(this->UpdateType) << cmCTestUpdateHandlerUpdateToString(this->UpdateType)
<< " repository type" << " repository type"
<< std::endl;); << std::endl;, this->Quiet);
// Create an object to interact with the VCS tool. // Create an object to interact with the VCS tool.
cmsys::auto_ptr<cmCTestVC> vc; cmsys::auto_ptr<cmCTestVC> vc;
@ -283,23 +286,23 @@ int cmCTestUpdateHandler::ProcessHandler()
int numUpdated = vc->GetPathCount(cmCTestVC::PathUpdated); int numUpdated = vc->GetPathCount(cmCTestVC::PathUpdated);
if(numUpdated) if(numUpdated)
{ {
cmCTestLog(this->CTest, HANDLER_OUTPUT, cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
" Found " << numUpdated << " updated files\n"); " Found " << numUpdated << " updated files\n", this->Quiet);
} }
if(int numModified = vc->GetPathCount(cmCTestVC::PathModified)) if(int numModified = vc->GetPathCount(cmCTestVC::PathModified))
{ {
cmCTestLog(this->CTest, HANDLER_OUTPUT, cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
" Found " << numModified << " locally modified files\n"); " Found " << numModified << " locally modified files\n", this->Quiet);
localModifications += numModified; localModifications += numModified;
} }
if(int numConflicting = vc->GetPathCount(cmCTestVC::PathConflicting)) if(int numConflicting = vc->GetPathCount(cmCTestVC::PathConflicting))
{ {
cmCTestLog(this->CTest, HANDLER_OUTPUT, cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
" Found " << numConflicting << " conflicting files\n"); " Found " << numConflicting << " conflicting files\n", this->Quiet);
localModifications += numConflicting; localModifications += numConflicting;
} }
cmCTestLog(this->CTest, DEBUG, "End" << std::endl); cmCTestOptionalLog(this->CTest, DEBUG, "End" << std::endl, this->Quiet);
std::string end_time = this->CTest->CurrentTime(); std::string end_time = this->CTest->CurrentTime();
os << "\t<EndDateTime>" << end_time << "</EndDateTime>\n" os << "\t<EndDateTime>" << end_time << "</EndDateTime>\n"
<< "\t<EndTime>" << static_cast<unsigned int>(cmSystemTools::GetTime()) << "\t<EndTime>" << static_cast<unsigned int>(cmSystemTools::GetTime())
@ -331,8 +334,8 @@ int cmCTestUpdateHandler::ProcessHandler()
int cmCTestUpdateHandler::DetectVCS(const char* dir) int cmCTestUpdateHandler::DetectVCS(const char* dir)
{ {
std::string sourceDirectory = dir; std::string sourceDirectory = dir;
cmCTestLog(this->CTest, DEBUG, "Check directory: " cmCTestOptionalLog(this->CTest, DEBUG, "Check directory: "
<< sourceDirectory << std::endl); << sourceDirectory << std::endl, this->Quiet);
sourceDirectory += "/.svn"; sourceDirectory += "/.svn";
if ( cmSystemTools::FileExists(sourceDirectory.c_str()) ) if ( cmSystemTools::FileExists(sourceDirectory.c_str()) )
{ {

View File

@ -13,6 +13,9 @@ function(run_child)
message(FATAL_ERROR "Child failed (${FAILED}), output is\n ${OUTPUT}\n" message(FATAL_ERROR "Child failed (${FAILED}), output is\n ${OUTPUT}\n"
"Command = [${ARGN}]\n") "Command = [${ARGN}]\n")
endif() endif()
# Pass output back up to the parent scope for possible further inspection.
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
endfunction() endfunction()
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
@ -269,6 +272,9 @@ function(run_dashboard_script bin_dir)
Updated{subdir/bar.txt} Updated{subdir/bar.txt}
) )
endif() endif()
# Pass console output up to the parent, in case they'd like to inspect it.
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
endfunction() endfunction()
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------

View File

@ -334,3 +334,36 @@ set(CTEST_UPDATE_VERSION_ONLY TRUE)
# Run the dashboard script with CTest. # Run the dashboard script with CTest.
set(NO_UPDATE 1) set(NO_UPDATE 1)
run_dashboard_script(dash-binary-no-update) run_dashboard_script(dash-binary-no-update)
rewind_source(dash-source)
#-----------------------------------------------------------------------------
# Test ctest_update(QUIET)
set(NO_UPDATE 0)
message("Running CTest Dashboard Script (update quietly)...")
create_dashboard_script(dash-binary-quiet
"# git command configuration
set(CTEST_GIT_COMMAND \"${GIT}\")
set(CTEST_GIT_UPDATE_OPTIONS)
set(CTEST_GIT_UPDATE_CUSTOM \${CTEST_GIT_COMMAND} pull origin master)
")
# We need to modify the created dashboard script to include our "QUIET"
# option.
set(filename "${TOP}/dash-binary-quiet.cmake")
file(READ "${filename}" contents)
string(REPLACE
[=[ctest_update(SOURCE ${CTEST_SOURCE_DIRECTORY})]=]
[=[ctest_update(SOURCE ${CTEST_SOURCE_DIRECTORY} QUIET)]=]
contents
"${contents}")
file(WRITE "${filename}" "${contents}")
# Run the dashboard script with CTest.
run_dashboard_script(dash-binary-quiet)
# Make sure the output seems quiet.
if("${OUTPUT}" MATCHES "Updating the repository")
message(FATAL_ERROR "Found 'Updating the repository' in quiet output")
endif()