diff options
Diffstat (limited to 'Modules/ExternalProject/gitupdate.cmake.in')
-rw-r--r-- | Modules/ExternalProject/gitupdate.cmake.in | 92 |
1 files changed, 65 insertions, 27 deletions
diff --git a/Modules/ExternalProject/gitupdate.cmake.in b/Modules/ExternalProject/gitupdate.cmake.in index 7033918..fc2a6ab 100644 --- a/Modules/ExternalProject/gitupdate.cmake.in +++ b/Modules/ExternalProject/gitupdate.cmake.in @@ -3,6 +3,10 @@ cmake_minimum_required(VERSION 3.5) +set(quiet "@quiet@") +set(script_dir "@CMAKE_CURRENT_FUNCTION_LIST_DIR@/ExternalProject") +include(${script_dir}/captured_process_setup.cmake) + function(get_hash_for_ref ref out_var err_var) execute_process( COMMAND "@git_EXECUTABLE@" rev-parse "${ref}" @@ -49,7 +53,7 @@ elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/tags/") # FIXME: We should provide an option to always fetch for this case get_hash_for_ref("@git_tag@" tag_sha error_msg) if(tag_sha STREQUAL head_sha) - message(VERBOSE "Already at requested tag: ${tag_sha}") + _ep_message_quiet_capture(VERBOSE "Already at requested tag: ${tag_sha}") return() endif() @@ -65,7 +69,7 @@ else() get_hash_for_ref("@git_tag@" tag_sha error_msg) if(tag_sha STREQUAL head_sha) # Have the right commit checked out already - message(VERBOSE "Already at requested ref: ${tag_sha}") + _ep_message_quiet_capture(VERBOSE "Already at requested ref: ${tag_sha}") return() elseif(tag_sha STREQUAL "") @@ -76,7 +80,7 @@ else() set(fetch_required YES) set(checkout_name "@git_tag@") if(NOT error_msg STREQUAL "") - message(VERBOSE "${error_msg}") + _ep_message_quiet_capture(VERBOSE "${error_msg}") endif() else() @@ -86,18 +90,22 @@ else() set(fetch_required NO) set(checkout_name "@git_tag@") if(NOT error_msg STREQUAL "") - message(WARNING "${error_msg}") + _ep_message_quiet_capture(WARNING "${error_msg}") endif() endif() endif() if(fetch_required) - message(VERBOSE "Fetching latest from the remote @git_remote_name@") + _ep_message_quiet_capture(VERBOSE "Fetching latest from the remote @git_remote_name@") execute_process( COMMAND "@git_EXECUTABLE@" fetch --tags --force "@git_remote_name@" WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} + ) + _ep_command_check_result( + error_code "Failed to fetch from the remote @git_remote_name@'" ) endif() @@ -128,12 +136,15 @@ if(git_update_strategy MATCHES "^REBASE(_CHECKOUT)?$") else() execute_process( - COMMAND "@git_EXECUTABLE@" for-each-ref "--format='%(upstream:short)'" "${current_branch}" + COMMAND "@git_EXECUTABLE@" for-each-ref + "--format='%(upstream:short)'" "${current_branch}" WORKING_DIRECTORY "@work_dir@" + RESULT_VARIABLE error_code # There is no error if no upstream is set OUTPUT_VARIABLE upstream_branch OUTPUT_STRIP_TRAILING_WHITESPACE - COMMAND_ERROR_IS_FATAL ANY # There is no error if no upstream is set + ${capture_error_only} ) + _ep_command_check_result(error_code) if(NOT upstream_branch STREQUAL checkout_name) # Not safe to rebase when asked to checkout a different branch to the one # we are tracking. If we did rebase, we could end up with arbitrary @@ -145,7 +156,9 @@ if(git_update_strategy MATCHES "^REBASE(_CHECKOUT)?$") endif() elseif(NOT git_update_strategy STREQUAL "CHECKOUT") - message(FATAL_ERROR "Unsupported git update strategy: ${git_update_strategy}") + _ep_message_quiet_capture(FATAL_ERROR + "Unsupported git update strategy: ${git_update_strategy}" + ) endif() @@ -155,10 +168,9 @@ execute_process( WORKING_DIRECTORY "@work_dir@" RESULT_VARIABLE error_code OUTPUT_VARIABLE repo_status + ${capture_error_only} ) -if(error_code) - message(FATAL_ERROR "Failed to get the status") -endif() +_ep_command_check_result(error_code "Failed to get the status") string(LENGTH "${repo_status}" need_stash) # If not in clean state, stash changes in order to be able to perform a @@ -167,16 +179,20 @@ if(need_stash) execute_process( COMMAND "@git_EXECUTABLE@" stash save @git_stash_save_options@ WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} ) + _ep_command_check_result(error_code) endif() if(git_update_strategy STREQUAL "CHECKOUT") execute_process( COMMAND "@git_EXECUTABLE@" checkout "${checkout_name}" WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} ) + _ep_command_check_result(error_code) else() execute_process( COMMAND "@git_EXECUTABLE@" rebase "${checkout_name}" @@ -198,12 +214,14 @@ else() execute_process( COMMAND "@git_EXECUTABLE@" stash pop --index --quiet WORKING_DIRECTORY "@work_dir@" - ) + ) endif() - message(FATAL_ERROR "\nFailed to rebase in: '@work_dir@'." - "\nOutput from the attempted rebase follows:" - "\n${rebase_output}" - "\n\nYou will have to resolve the conflicts manually") + _ep_message_quiet_capture(FATAL_ERROR + "\nFailed to rebase in: '@work_dir@'." + "\nOutput from the attempted rebase follows:" + "\n${rebase_output}" + "\n\nYou will have to resolve the conflicts manually" + ) endif() # Fall back to checkout. We create an annotated tag so that the user @@ -215,21 +233,27 @@ else() set(tag_name _cmake_ExternalProject_moved_from_here_${tag_timestamp}Z) set(error_log_file ${CMAKE_CURRENT_LIST_DIR}/rebase_error_${tag_timestamp}Z.log) file(WRITE ${error_log_file} "${rebase_output}") - message(WARNING "Rebase failed, output has been saved to ${error_log_file}" - "\nFalling back to checkout, previous commit tagged as ${tag_name}") + _ep_message_quiet_capture(WARNING + "Rebase failed, output has been saved to ${error_log_file}" + "\nFalling back to checkout, previous commit tagged as ${tag_name}" + ) execute_process( COMMAND "@git_EXECUTABLE@" tag -a -m "ExternalProject attempting to move from here to ${checkout_name}" ${tag_name} WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} ) + _ep_command_check_result(error_code) execute_process( COMMAND "@git_EXECUTABLE@" checkout "${checkout_name}" WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} ) + _ep_command_check_result(error_code) endif() endif() @@ -239,30 +263,42 @@ if(need_stash) COMMAND "@git_EXECUTABLE@" stash pop --index --quiet WORKING_DIRECTORY "@work_dir@" RESULT_VARIABLE error_code - ) + ${capture_output} + ) + _ep_accumulate_captured_output() if(error_code) # Stash pop --index failed: Try again dropping the index execute_process( COMMAND "@git_EXECUTABLE@" reset --hard --quiet WORKING_DIRECTORY "@work_dir@" + ${capture_output} ) + _ep_accumulate_captured_output() execute_process( COMMAND "@git_EXECUTABLE@" stash pop --quiet WORKING_DIRECTORY "@work_dir@" RESULT_VARIABLE error_code + ${capture_output} ) + _ep_accumulate_captured_output() if(error_code) # Stash pop failed: Restore previous state. execute_process( COMMAND "@git_EXECUTABLE@" reset --hard --quiet ${head_sha} WORKING_DIRECTORY "@work_dir@" + ${capture_output} ) + _ep_accumulate_captured_output() execute_process( COMMAND "@git_EXECUTABLE@" stash pop --index --quiet WORKING_DIRECTORY "@work_dir@" + ${capture_output} + ) + _ep_accumulate_captured_output() + _ep_message_quiet_capture(FATAL_ERROR + "Failed to unstash changes in: '@work_dir@'.\n" + "You will have to resolve the conflicts manually" ) - message(FATAL_ERROR "\nFailed to unstash changes in: '@work_dir@'." - "\nYou will have to resolve the conflicts manually") endif() endif() endif() @@ -272,6 +308,8 @@ if(init_submodules) execute_process( COMMAND "@git_EXECUTABLE@" submodule update @git_submodules_recurse@ --init @git_submodules@ WORKING_DIRECTORY "@work_dir@" - COMMAND_ERROR_IS_FATAL ANY + RESULT_VARIABLE error_code + ${capture_output} ) + _ep_command_check_result(error_code) endif() |