|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.5) |
|
|
|
function(get_hash_for_ref ref out_var err_var) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git rev-parse "${ref}^0" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
RESULT_VARIABLE error_code |
|
OUTPUT_VARIABLE ref_hash |
|
ERROR_VARIABLE error_msg |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
) |
|
if(error_code) |
|
set(${out_var} "" PARENT_SCOPE) |
|
else() |
|
set(${out_var} "${ref_hash}" PARENT_SCOPE) |
|
endif() |
|
set(${err_var} "${error_msg}" PARENT_SCOPE) |
|
endfunction() |
|
|
|
get_hash_for_ref(HEAD head_sha error_msg) |
|
if(head_sha STREQUAL "") |
|
message(FATAL_ERROR "Failed to get the hash for HEAD:\n${error_msg}") |
|
endif() |
|
|
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git show-ref "master" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
OUTPUT_VARIABLE show_ref_output |
|
) |
|
if(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/remotes/") |
|
|
|
|
|
set(fetch_required YES) |
|
set(checkout_name "master") |
|
|
|
elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/tags/") |
|
|
|
|
|
set(fetch_required YES) |
|
set(checkout_name "master") |
|
|
|
|
|
|
|
|
|
|
|
get_hash_for_ref("master" tag_sha error_msg) |
|
if(tag_sha STREQUAL head_sha) |
|
message(VERBOSE "Already at requested tag: ${tag_sha}") |
|
return() |
|
endif() |
|
|
|
elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/heads/") |
|
|
|
|
|
|
|
|
|
set(fetch_required YES) |
|
set(checkout_name "origin/master") |
|
|
|
else() |
|
get_hash_for_ref("master" tag_sha error_msg) |
|
if(tag_sha STREQUAL head_sha) |
|
|
|
message(VERBOSE "Already at requested ref: ${tag_sha}") |
|
return() |
|
|
|
elseif(tag_sha STREQUAL "") |
|
|
|
|
|
|
|
|
|
set(fetch_required YES) |
|
set(checkout_name "master") |
|
if(NOT error_msg STREQUAL "") |
|
message(VERBOSE "${error_msg}") |
|
endif() |
|
|
|
else() |
|
|
|
|
|
|
|
set(fetch_required NO) |
|
set(checkout_name "master") |
|
if(NOT error_msg STREQUAL "") |
|
message(WARNING "${error_msg}") |
|
endif() |
|
|
|
endif() |
|
endif() |
|
|
|
if(fetch_required) |
|
message(VERBOSE "Fetching latest from the remote origin") |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git fetch --tags --force "origin" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
endif() |
|
|
|
set(git_update_strategy "REBASE") |
|
if(git_update_strategy STREQUAL "") |
|
|
|
set(git_update_strategy REBASE) |
|
endif() |
|
|
|
if(git_update_strategy MATCHES "^REBASE(_CHECKOUT)?$") |
|
|
|
|
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git symbolic-ref -q HEAD |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
OUTPUT_VARIABLE current_branch |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
|
|
|
|
) |
|
|
|
if(current_branch STREQUAL "") |
|
|
|
|
|
|
|
set(git_update_strategy CHECKOUT) |
|
|
|
else() |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git for-each-ref "--format=%(upstream:short)" "${current_branch}" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
OUTPUT_VARIABLE upstream_branch |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
if(NOT upstream_branch STREQUAL checkout_name) |
|
|
|
|
|
|
|
|
|
|
|
set(git_update_strategy CHECKOUT) |
|
endif() |
|
|
|
endif() |
|
elseif(NOT git_update_strategy STREQUAL "CHECKOUT") |
|
message(FATAL_ERROR "Unsupported git update strategy: ${git_update_strategy}") |
|
endif() |
|
|
|
|
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git status --porcelain |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
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(need_stash) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git stash save --quiet;--include-untracked |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
endif() |
|
|
|
if(git_update_strategy STREQUAL "CHECKOUT") |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git checkout "${checkout_name}" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
else() |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git rebase "${checkout_name}" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
RESULT_VARIABLE error_code |
|
OUTPUT_VARIABLE rebase_output |
|
ERROR_VARIABLE rebase_output |
|
) |
|
if(error_code) |
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git rebase --abort |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
) |
|
|
|
if(NOT git_update_strategy STREQUAL "REBASE_CHECKOUT") |
|
|
|
if(need_stash) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
) |
|
endif() |
|
message(FATAL_ERROR "\nFailed to rebase in: '/content/XNNPACK/build/psimd-source'." |
|
"\nOutput from the attempted rebase follows:" |
|
"\n${rebase_output}" |
|
"\n\nYou will have to resolve the conflicts manually") |
|
endif() |
|
|
|
|
|
|
|
|
|
|
|
|
|
string(TIMESTAMP tag_timestamp "%Y%m%dT%H%M%S" UTC) |
|
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}") |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git tag -a |
|
-m "ExternalProject attempting to move from here to ${checkout_name}" |
|
${tag_name} |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git checkout "${checkout_name}" |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
endif() |
|
endif() |
|
|
|
if(need_stash) |
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
RESULT_VARIABLE error_code |
|
) |
|
if(error_code) |
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git reset --hard --quiet |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git stash pop --quiet |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
RESULT_VARIABLE error_code |
|
) |
|
if(error_code) |
|
|
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git reset --hard --quiet ${head_sha} |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
) |
|
message(FATAL_ERROR "\nFailed to unstash changes in: '/content/XNNPACK/build/psimd-source'." |
|
"\nYou will have to resolve the conflicts manually") |
|
endif() |
|
endif() |
|
endif() |
|
|
|
set(init_submodules "TRUE") |
|
if(init_submodules) |
|
execute_process( |
|
COMMAND "/usr/bin/git" --git-dir=.git submodule update --recursive --init |
|
WORKING_DIRECTORY "/content/XNNPACK/build/psimd-source" |
|
COMMAND_ERROR_IS_FATAL ANY |
|
) |
|
endif() |
|
|