Skip to content

Commit 0652dee

Browse files
committed
fix: use git_wait for all write git operations to allow parallel builds
1 parent 9896ae3 commit 0652dee

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

src/Git.cmake

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ function(git_pull)
160160

161161
message(STATUS "Updating ${_fun_REPOSITORY_PATH}")
162162
find_program(GIT_EXECUTABLE "git" REQUIRED)
163+
164+
# wait for lock before pulling
165+
git_wait(REPOSITORY_PATH "${_fun_REPOSITORY_PATH}")
166+
163167
execute_process(
164168
COMMAND "${GIT_EXECUTABLE}" "pull" WORKING_DIRECTORY "${_fun_REPOSITORY_PATH}"
165169
COMMAND_ERROR_IS_FATAL LAST
@@ -212,6 +216,9 @@ function(git_checkout)
212216
return()
213217
endif()
214218

219+
# wait for lock before checking out
220+
git_wait(REPOSITORY_PATH "${_fun_REPOSITORY_PATH}")
221+
215222
find_program(GIT_EXECUTABLE "git" REQUIRED)
216223
execute_process(
217224
COMMAND "${GIT_EXECUTABLE}" "-c" "advice.detachedHead=false" "checkout" "${_fun_REVISION}"
@@ -376,7 +383,7 @@ function(git_revision REVISION)
376383
COMMAND "${GIT_EXECUTABLE}" "rev-parse" "HEAD"
377384
OUTPUT_VARIABLE _git_revision
378385
WORKING_DIRECTORY "${_fun_REPOSITORY_PATH}"
379-
OUTPUT_STRIP_TRAILING_WHITESPACE
386+
OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL LAST
380387
)
381388
set(${REVISION} ${_git_revision} PARENT_SCOPE)
382389
endfunction()
@@ -411,7 +418,7 @@ function(git_is_detached IS_DETACHED)
411418
COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--abbrev-ref" "--symbolic-full-name" "HEAD"
412419
OUTPUT_VARIABLE _git_status
413420
WORKING_DIRECTORY "${_fun_REPOSITORY_PATH}"
414-
OUTPUT_STRIP_TRAILING_WHITESPACE
421+
OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL LAST
415422
)
416423
if("${_git_status}" STREQUAL "HEAD")
417424
set(${IS_DETACHED} TRUE PARENT_SCOPE)
@@ -444,8 +451,13 @@ function(git_switch_back)
444451

445452
if(${IS_DETACHED})
446453
message(STATUS "Switch back ${_fun_REPOSITORY_PATH}")
454+
455+
# wait for lock before switching back
456+
git_wait(REPOSITORY_PATH "${_fun_REPOSITORY_PATH}")
457+
447458
execute_process(
448459
COMMAND "${GIT_EXECUTABLE}" "switch" "-" WORKING_DIRECTORY "${_fun_REPOSITORY_PATH}"
460+
COMMAND_ERROR_IS_FATAL LAST
449461
)
450462
endif()
451463
endfunction()
@@ -477,20 +489,17 @@ function(git_wait)
477489

478490
set(counter 0)
479491

480-
message(STATUS "Waiting for git lock file...[${counter}/${_fun_TIMEOUT_COUNTER}]")
481-
482492
# wait until .git/index is present (in case a parallel clone is running)
483493
while(NOT EXISTS "${_fun_REPOSITORY_PATH}/.git/index"
484494
OR EXISTS "${_fun_REPOSITORY_PATH}/.git/index.lock"
485495
)
486-
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 0.5)
496+
message(STATUS "Waiting for git lock file...[${counter}/${_fun_TIMEOUT_COUNTER}]")
497+
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 0.5 COMMAND_ERROR_IS_FATAL LAST)
487498

488499
math(EXPR counter "${counter} + 1")
489500
if(${counter} GREATER ${_fun_TIMEOUT_COUNTER})
490501
message(STATUS "Timeout waiting for git lock file. Continuing...")
491502
return()
492-
else()
493-
message(STATUS "Waiting for git lock file...[${counter}/${_fun_TIMEOUT_COUNTER}]")
494503
endif()
495504
endwhile()
496505
endfunction()

0 commit comments

Comments
 (0)