diff options
author | Brad King <brad.king@kitware.com> | 2012-01-18 09:12:00 -0500 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-01-18 09:12:00 -0500 |
commit | 849820219e84e251ad99121f738456f3743ba4fa (patch) | |
tree | 94c86c2af20055a69b48886740cdb4c518ab8aa3 | |
parent | fe760baa0af5287d8a27552fced1a646a042f1ed (diff) | |
download | cmake-849820219e84e251ad99121f738456f3743ba4fa.tar.gz |
cmake_common: Remove source tree when .git is corrupted
Some dashboard builds run on scratch disks that arbitrarily remove files
that have not been accessed in a while. Since Git uses O_NOATIME for
repository objects the .git repository files may disappear thus
corrupting the repository. When this happens even "git reset --hard"
will fail, so wipe out the source tree to get a fresh clone.
-rw-r--r-- | cmake_common.cmake | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/cmake_common.cmake b/cmake_common.cmake index f3a4cb34b5..2d7091a731 100644 --- a/cmake_common.cmake +++ b/cmake_common.cmake @@ -193,6 +193,17 @@ if(EXISTS ${CTEST_SOURCE_DIRECTORY}) if(CTEST_GIT_COMMAND) if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}/.git") set(vcs_refresh "because it is not managed by git.") + else() + execute_process( + COMMAND ${CTEST_GIT_COMMAND} reset --hard + WORKING_DIRECTORY "${CTEST_SOURCE_DIRECTORY}" + OUTPUT_VARIABLE output + ERROR_VARIABLE output + RESULT_VARIABLE failed + ) + if(failed) + set(vcs_refresh "because its .git may be corrupted.") + endif() endif() endif() if(vcs_refresh AND "${CTEST_SOURCE_DIRECTORY}" MATCHES "/CMake[^/]*") |