@@ -15,6 +15,8 @@ macro(run_vcpkg)
1515 ""
1616 ${ARGN} )
1717
18+ find_program (GIT_EXECUTABLE "git" REQUIRED)
19+
1820 if (NOT
1921 "${_vcpkg_args_VCPKG_DIR} "
2022 STREQUAL
@@ -39,8 +41,26 @@ macro(run_vcpkg)
3941 if (EXISTS "${_vcpkg_args_VCPKG_DIR} " AND EXISTS "${_vcpkg_args_VCPKG_DIR} /vcpkg${CMAKE_EXECUTABLE_SUFFIX} " )
4042 message (STATUS "vcpkg is already installed at ${_vcpkg_args_VCPKG_DIR} ." )
4143 if (${_vcpkg_args_ENABLE_VCPKG_UPDATE} )
44+
45+ if (NOT
46+ "${_vcpkg_args_VCPKG_REV} "
47+ STREQUAL
48+ "" )
49+ # detect if the head is detached, if so, switch back before calling git pull on a detached head
50+ set (GIT_STATUS "" )
51+ execute_process (
52+ COMMAND "${GIT_EXECUTABLE} " "rev-parse" "--abbrev-ref" "--symbolic-full-name" "HEAD"
53+ OUTPUT_VARIABLE GIT_STATUS
54+ WORKING_DIRECTORY "${_vcpkg_args_VCPKG_DIR} "
55+ OUTPUT_STRIP_TRAILING_WHITESPACE)
56+ if ("${GIT_STATUS} " STREQUAL "HEAD" )
57+ message (STATUS "Switching back before updating" )
58+ execute_process (COMMAND "${GIT_EXECUTABLE} " "switch" "-" WORKING_DIRECTORY "${_vcpkg_args_VCPKG_DIR} " )
59+ endif ()
60+ endif ()
61+
4262 message (STATUS "Updating the repository..." )
43- execute_process (COMMAND "git " "pull" WORKING_DIRECTORY "${_vcpkg_args_VCPKG_DIR} " )
63+ execute_process (COMMAND "${GIT_EXECUTABLE} " "pull" WORKING_DIRECTORY "${_vcpkg_args_VCPKG_DIR} " )
4464 endif ()
4565 else ()
4666 message (STATUS "Installing vcpkg at ${_vcpkg_args_VCPKG_DIR} " )
@@ -49,7 +69,6 @@ macro(run_vcpkg)
4969 if ("${_vcpkg_args_VCPKG_URL} " STREQUAL "" )
5070 set (_vcpkg_args_VCPKG_URL "https://github.com/microsoft/vcpkg.git" )
5171 endif ()
52- find_program (GIT_EXECUTABLE "git" REQUIRED)
5372 execute_process (COMMAND "${GIT_EXECUTABLE} " "clone" "${_vcpkg_args_VCPKG_URL} "
5473 WORKING_DIRECTORY "${VCPKG_PARENT_DIR} " COMMAND_ERROR_IS_FATAL LAST)
5574 endif ()
@@ -67,7 +86,6 @@ macro(run_vcpkg)
6786 "${_vcpkg_args_VCPKG_REV} "
6887 STREQUAL
6988 "" )
70- find_program (GIT_EXECUTABLE "git" REQUIRED)
7189 execute_process (COMMAND "${GIT_EXECUTABLE} " "checkout" "${_vcpkg_args_VCPKG_REV} "
7290 WORKING_DIRECTORY "${VCPKG_PARENT_DIR} /vcpkg" COMMAND_ERROR_IS_FATAL LAST)
7391 endif ()
0 commit comments