From 39b5df2f3714c32d498fcb7c88f5bda456f75cb3 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 13 Aug 2014 13:45:08 -0400 Subject: ctest_update: Add CTEST_UPDATE_VERSION_ONLY option to only note the version This allows ctest_update to get the current version without actually changing the repository. This is useful when using Jenkins or an external project to update the source to a specific version, but you still want the current version to show up in CDash. --- Help/manual/cmake-variables.7.rst | 1 + Help/manual/ctest.1.rst | 9 ++++++ Help/variable/CTEST_UPDATE_VERSION_ONLY.rst | 5 +++ Modules/DartConfiguration.tcl.in | 3 ++ Source/CTest/cmCTestUpdateCommand.cxx | 2 ++ Source/CTest/cmCTestVC.cxx | 15 ++++++--- Tests/CTestUpdateCommon.cmake | 48 ++++++++++++++++++++++++----- Tests/CTestUpdateGIT.cmake.in | 17 ++++++++++ 8 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 Help/variable/CTEST_UPDATE_VERSION_ONLY.rst diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 05a7b33..43c2af3 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -360,6 +360,7 @@ Variables for CTest /variable/CTEST_TRIGGER_SITE /variable/CTEST_UPDATE_COMMAND /variable/CTEST_UPDATE_OPTIONS + /variable/CTEST_UPDATE_VERSION_ONLY /variable/CTEST_USE_LAUNCHERS Variables for CPack diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst index a57a8f0..52e4beb 100644 --- a/Help/manual/ctest.1.rst +++ b/Help/manual/ctest.1.rst @@ -668,6 +668,15 @@ Configuration settings to specify the version control tool include: * :module:`CTest` module variable: ``UPDATE_TYPE`` if set, else ``CTEST_UPDATE_TYPE`` +``UpdateVersionOnly`` + Specify that you want the version control update command to only + discover the current version that is checked out, and not to update + to a different version. + + * `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_ONLY` + + + Additional configuration settings include: ``NightlyStartTime`` diff --git a/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst b/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst new file mode 100644 index 0000000..e646e6e --- /dev/null +++ b/Help/variable/CTEST_UPDATE_VERSION_ONLY.rst @@ -0,0 +1,5 @@ +CTEST_UPDATE_VERSION_ONLY +------------------------- + +Specify the CTest ``UpdateVersionOnly`` setting +in a :manual:`ctest(1)` dashboard client script. diff --git a/Modules/DartConfiguration.tcl.in b/Modules/DartConfiguration.tcl.in index 0420882..86049d0 100644 --- a/Modules/DartConfiguration.tcl.in +++ b/Modules/DartConfiguration.tcl.in @@ -37,6 +37,9 @@ ConfigureCommand: "@CMAKE_COMMAND@" "@PROJECT_SOURCE_DIR@" MakeCommand: @MAKECOMMAND@ DefaultCTestConfigurationType: @DEFAULT_CTEST_CONFIGURATION_TYPE@ +# version control +UpdateVersionOnly: @CTEST_UPDATE_VERSION_ONLY@ + # CVS options # Default is "-d -P -A" CVSCommand: @CVSCOMMAND@ diff --git a/Source/CTest/cmCTestUpdateCommand.cxx b/Source/CTest/cmCTestUpdateCommand.cxx index 5408a8a..f87466d 100644 --- a/Source/CTest/cmCTestUpdateCommand.cxx +++ b/Source/CTest/cmCTestUpdateCommand.cxx @@ -56,6 +56,8 @@ cmCTestGenericHandler* cmCTestUpdateCommand::InitializeHandler() this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, "GITUpdateCustom", "CTEST_GIT_UPDATE_CUSTOM"); this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, + "UpdateVersionOnly", "CTEST_UPDATE_VERSION_ONLY"); + this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, "HGCommand", "CTEST_HG_COMMAND"); this->CTest->SetCTestConfigurationFromCMakeVariable(this->Makefile, "HGUpdateOptions", "CTEST_HG_UPDATE_OPTIONS"); diff --git a/Source/CTest/cmCTestVC.cxx b/Source/CTest/cmCTestVC.cxx index f89fa2b..15f796f 100644 --- a/Source/CTest/cmCTestVC.cxx +++ b/Source/CTest/cmCTestVC.cxx @@ -166,10 +166,17 @@ void cmCTestVC::CleanupImpl() //---------------------------------------------------------------------------- bool cmCTestVC::Update() { - this->NoteOldRevision(); - this->Log << "--- Begin Update ---\n"; - bool result = this->UpdateImpl(); - this->Log << "--- End Update ---\n"; + bool result = true; + // if update version only is on then do not actually update, + // just note the current version and finish + if(!cmSystemTools::IsOn( + this->CTest->GetCTestConfiguration("UpdateVersionOnly").c_str())) + { + this->NoteOldRevision(); + this->Log << "--- Begin Update ---\n"; + result = this->UpdateImpl(); + this->Log << "--- End Update ---\n"; + } this->NoteNewRevision(); return result; } diff --git a/Tests/CTestUpdateCommon.cmake b/Tests/CTestUpdateCommon.cmake index 857c6f5..97153f0 100644 --- a/Tests/CTestUpdateCommon.cmake +++ b/Tests/CTestUpdateCommon.cmake @@ -219,6 +219,36 @@ function(run_dashboard_command_line bin_dir) endfunction() #----------------------------------------------------------------------------- +# Function to find the Update.xml file and make sure +# it only has the Revision in it and no updates +function(check_no_update bin_dir) + set(PATTERN ${TOP}/${bin_dir}/Testing/*/Update.xml) + file(GLOB UPDATE_XML_FILE RELATIVE ${TOP} ${PATTERN}) + string(REGEX REPLACE "//Update.xml$" "/Update.xml" + UPDATE_XML_FILE "${UPDATE_XML_FILE}") + message(" found ${UPDATE_XML_FILE}") + set(rev_regex "Revision|PriorRevision") + file(STRINGS ${TOP}/${UPDATE_XML_FILE} UPDATE_XML_REVISIONS + REGEX "^\t<(${rev_regex})>[^<\n]+$" + ) + set(found_revisons FALSE) + foreach(r IN LISTS UPDATE_XML_REVISIONS) + if("${r}" MATCHES "PriorRevision") + message(FATAL_ERROR "Found PriorRevision in no update test") + endif() + if("${r}" MATCHES "") + set(found_revisons TRUE) + endif() + endforeach() + if(found_revisons) + message(" found in no update test") + else() + message(FATAL_ERROR " missing in no update test") + endif() +endfunction() + + +#----------------------------------------------------------------------------- # Function to run the dashboard through a script function(run_dashboard_script bin_dir) run_child( @@ -228,13 +258,17 @@ function(run_dashboard_script bin_dir) # Verify the updates reported by CTest. list(APPEND UPDATE_MAYBE Updated{subdir} Updated{CTestConfig.cmake}) - check_updates(${bin_dir} - Updated{foo.txt} - Updated{bar.txt} - Updated{zot.txt} - Updated{subdir/foo.txt} - Updated{subdir/bar.txt} - ) + if(NO_UPDATE) + check_no_update(${bin_dir}) + else() + check_updates(${bin_dir} + Updated{foo.txt} + Updated{bar.txt} + Updated{zot.txt} + Updated{subdir/foo.txt} + Updated{subdir/bar.txt} + ) + endif() endfunction() #----------------------------------------------------------------------------- diff --git a/Tests/CTestUpdateGIT.cmake.in b/Tests/CTestUpdateGIT.cmake.in index f6939de..41b732b 100644 --- a/Tests/CTestUpdateGIT.cmake.in +++ b/Tests/CTestUpdateGIT.cmake.in @@ -317,3 +317,20 @@ set(CTEST_GIT_UPDATE_CUSTOM \${CTEST_GIT_COMMAND} pull origin master) # Run the dashboard script with CTest. run_dashboard_script(dash-binary-custom) + + +rewind_source(dash-source) + +#----------------------------------------------------------------------------- +# Test no update with a dashboard script. +message("Running CTest Dashboard Script (No update)...") + +create_dashboard_script(dash-binary-no-update + "# git command configuration +set(CTEST_GIT_COMMAND \"${GIT}\") +set(CTEST_UPDATE_VERSION_ONLY TRUE) +") + +# Run the dashboard script with CTest. +set(NO_UPDATE 1) +run_dashboard_script(dash-binary-no-update) -- cgit v0.12