summaryrefslogtreecommitdiffstats
path: root/Modules/ExternalProject/gitupdate.cmake.in
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/ExternalProject/gitupdate.cmake.in')
-rw-r--r--Modules/ExternalProject/gitupdate.cmake.in92
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()