|
|
@@ -1251,171 +1251,13 @@ function(_ep_write_gitupdate_script script_filename git_EXECUTABLE git_tag git_r
|
|
|
else()
|
|
|
set(git_stash_save_options --quiet)
|
|
|
endif()
|
|
|
- file(WRITE ${script_filename}
|
|
|
-"
|
|
|
-execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" rev-list --max-count=1 HEAD
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- OUTPUT_VARIABLE head_sha
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
- )
|
|
|
-if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to get the hash for HEAD\")
|
|
|
-endif()
|
|
|
|
|
|
-execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" show-ref ${git_tag}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- OUTPUT_VARIABLE show_ref_output
|
|
|
- )
|
|
|
-# If a remote ref is asked for, which can possibly move around,
|
|
|
-# we must always do a fetch and checkout.
|
|
|
-if(\"\${show_ref_output}\" MATCHES \"remotes\")
|
|
|
- set(is_remote_ref 1)
|
|
|
-else()
|
|
|
- set(is_remote_ref 0)
|
|
|
-endif()
|
|
|
-
|
|
|
-# Tag is in the form <remote>/<tag> (i.e. origin/master) we must strip
|
|
|
-# the remote from the tag.
|
|
|
-if(\"\${show_ref_output}\" MATCHES \"refs/remotes/${git_tag}\")
|
|
|
- string(REGEX MATCH \"^([^/]+)/(.+)$\" _unused \"${git_tag}\")
|
|
|
- set(git_remote \"\${CMAKE_MATCH_1}\")
|
|
|
- set(git_tag \"\${CMAKE_MATCH_2}\")
|
|
|
-else()
|
|
|
- set(git_remote \"${git_remote_name}\")
|
|
|
- set(git_tag \"${git_tag}\")
|
|
|
-endif()
|
|
|
-
|
|
|
-# This will fail if the tag does not exist (it probably has not been fetched
|
|
|
-# yet).
|
|
|
-execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" rev-list --max-count=1 ${git_tag}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- OUTPUT_VARIABLE tag_sha
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ configure_file(
|
|
|
+ "${_ExternalProject_SELF_DIR}/ExternalProject-gitupdate.cmake.in"
|
|
|
+ "${script_filename}"
|
|
|
+ @ONLY
|
|
|
)
|
|
|
-
|
|
|
-# Is the hash checkout out that we want?
|
|
|
-if(error_code OR is_remote_ref OR NOT (\"\${tag_sha}\" STREQUAL \"\${head_sha}\"))
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" fetch
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to fetch repository '${git_repository}'\")
|
|
|
- endif()
|
|
|
-
|
|
|
- if(is_remote_ref)
|
|
|
- # Check if stash is needed
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" status --porcelain
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- OUTPUT_VARIABLE repo_status
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to get the status\")
|
|
|
- endif()
|
|
|
- string(LENGTH \"\${repo_status}\" need_stash)
|
|
|
-
|
|
|
- # If not in clean state, stash changes in order to be able to be able to
|
|
|
- # perform git pull --rebase
|
|
|
- if(need_stash)
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" stash save ${git_stash_save_options}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to stash changes\")
|
|
|
- endif()
|
|
|
- endif()
|
|
|
-
|
|
|
- # Pull changes from the remote branch
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" rebase \${git_remote}/\${git_tag}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- # Rebase failed: Restore previous state.
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" rebase --abort
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- )
|
|
|
- if(need_stash)
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- )
|
|
|
- endif()
|
|
|
- message(FATAL_ERROR \"\\nFailed to rebase in: '${work_dir}/${src_name}'.\\nYou will have to resolve the conflicts manually\")
|
|
|
- endif()
|
|
|
-
|
|
|
- if(need_stash)
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- # Stash pop --index failed: Try again dropping the index
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" reset --hard --quiet
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" stash pop --quiet
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- # Stash pop failed: Restore previous state.
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" reset --hard --quiet \${head_sha}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- )
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" stash pop --index --quiet
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- )
|
|
|
- message(FATAL_ERROR \"\\nFailed to unstash changes in: '${work_dir}/${src_name}'.\\nYou will have to resolve the conflicts manually\")
|
|
|
- endif()
|
|
|
- endif()
|
|
|
- endif()
|
|
|
- else()
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" checkout ${git_tag}
|
|
|
- WORKING_DIRECTORY \"${work_dir}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\")
|
|
|
- endif()
|
|
|
- endif()
|
|
|
-
|
|
|
- set(init_submodules ${init_submodules})
|
|
|
- if(init_submodules)
|
|
|
- execute_process(
|
|
|
- COMMAND \"${git_EXECUTABLE}\" submodule update ${git_submodules_recurse} --init ${git_submodules}
|
|
|
- WORKING_DIRECTORY \"${work_dir}/${src_name}\"
|
|
|
- RESULT_VARIABLE error_code
|
|
|
- )
|
|
|
- endif()
|
|
|
- if(error_code)
|
|
|
- message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\")
|
|
|
- endif()
|
|
|
-endif()
|
|
|
-
|
|
|
-"
|
|
|
-)
|
|
|
-
|
|
|
-endfunction(_ep_write_gitupdate_script)
|
|
|
+endfunction()
|
|
|
|
|
|
function(_ep_write_downloadfile_script script_filename REMOTE LOCAL timeout no_progress hash tls_verify tls_cainfo userpwd http_headers netrc netrc_file)
|
|
|
if(timeout)
|