Commit 493388ce authored by Brad King's avatar Brad King

ctest_update: Fix RETURN_VALUE on VCS tool failure (#15610)

Make RETURN_VALUE report -1 if the update command failed as the
documentation claims.  Also avoid reporting a ctest script-level failure
if the update command fails because we still correctly administered the
update step.
parent bcf25803
......@@ -283,13 +283,13 @@ int cmCTestUpdateHandler::ProcessHandler()
{
xml.Content("Update command failed:\n");
xml.Content(vc->GetUpdateCommandLine());
cmCTestLog(this->CTest, ERROR_MESSAGE, " Update command failed: "
cmCTestLog(this->CTest, HANDLER_OUTPUT, " Update command failed: "
<< vc->GetUpdateCommandLine() << "\n");
}
xml.EndElement(); // UpdateReturnStatus
xml.EndElement(); // Update
xml.EndDocument();
return numUpdated;
return updated? numUpdated : -1;
}
//----------------------------------------------------------------------
......
......@@ -170,3 +170,22 @@ set(CTEST_CHECKOUT_COMMAND
# Run the dashboard script with CTest.
run_dashboard_script(dash-binary)
#-----------------------------------------------------------------------------
# Test ctest_update(RETURN_VALUE) on failure
message("Running CTest Dashboard Script (fail to update)...")
set(ctest_update_check [[
if(NOT ret LESS 0)
message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
endif()
]])
create_dashboard_script(dash-binary-fail
"set(CTEST_CVS_COMMAND \"update-command-does-not-exist\")
")
unset(ctest_update_check)
# Run the dashboard script with CTest.
set(FAIL_UPDATE 1)
run_dashboard_script(dash-binary-fail)
unset(FAIL_UPDATE)
......@@ -258,6 +258,24 @@ function(check_no_update bin_dir)
endif()
endfunction()
#-----------------------------------------------------------------------------
# Function to find the Update.xml file and make sure
# it only has the UpdateReturnStatus failure message and no updates.
function(check_fail_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}")
file(STRINGS ${TOP}/${UPDATE_XML_FILE} UPDATE_XML_STATUS
REGEX "^\t<UpdateReturnStatus>[^<\n]+"
)
if(UPDATE_XML_STATUS MATCHES "Update command failed")
message(" correctly found 'Update command failed'")
else()
message(FATAL_ERROR " missing 'Update command failed'")
endif()
endfunction()
#-----------------------------------------------------------------------------
# Function to run the dashboard through a script
......@@ -271,6 +289,8 @@ function(run_dashboard_script bin_dir)
list(APPEND UPDATE_MAYBE Updated{subdir} Updated{CTestConfig.cmake})
if(NO_UPDATE)
check_no_update(${bin_dir})
elseif(FAIL_UPDATE)
check_fail_update(${bin_dir})
else()
check_updates(${bin_dir}
Updated{foo.txt}
......
......@@ -358,3 +358,23 @@ run_dashboard_script(dash-binary-quiet)
if("${OUTPUT}" MATCHES "Updating the repository")
message(FATAL_ERROR "Found 'Updating the repository' in quiet output")
endif()
#-----------------------------------------------------------------------------
# Test ctest_update(RETURN_VALUE) on failure
message("Running CTest Dashboard Script (fail to update)...")
set(ctest_update_check [[
if(NOT ret LESS 0)
message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
endif()
]])
create_dashboard_script(dash-binary-fail
"set(CTEST_GIT_COMMAND \"update-command-does-not-exist\")
")
unset(ctest_update_check)
# Run the dashboard script with CTest.
set(FAIL_UPDATE 1)
run_dashboard_script(dash-binary-fail)
unset(FAIL_UPDATE)
......@@ -164,3 +164,22 @@ execute_process(
# Run the dashboard script with CTest.
run_dashboard_script(dash-binary)
#-----------------------------------------------------------------------------
# Test ctest_update(RETURN_VALUE) on failure
message("Running CTest Dashboard Script (fail to update)...")
set(ctest_update_check [[
if(NOT ret LESS 0)
message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
endif()
]])
create_dashboard_script(dash-binary-fail
"set(CTEST_HG_COMMAND \"update-command-does-not-exist\")
")
unset(ctest_update_check)
# Run the dashboard script with CTest.
set(FAIL_UPDATE 1)
run_dashboard_script(dash-binary-fail)
unset(FAIL_UPDATE)
......@@ -147,3 +147,22 @@ set(CTEST_CHECKOUT_COMMAND
# Run the dashboard script with CTest.
run_dashboard_script(dash-binary)
#-----------------------------------------------------------------------------
# Test ctest_update(RETURN_VALUE) on failure
message("Running CTest Dashboard Script (fail to update)...")
set(ctest_update_check [[
if(NOT ret LESS 0)
message(FATAL_ERROR "ctest_update incorrectly succeeded with ${ret}")
endif()
]])
create_dashboard_script(dash-binary-fail
"set(CTEST_SVN_COMMAND \"update-command-does-not-exist\")
")
unset(ctest_update_check)
# Run the dashboard script with CTest.
set(FAIL_UPDATE 1)
run_dashboard_script(dash-binary-fail)
unset(FAIL_UPDATE)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment