summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-01-18 09:12:00 -0500
committerBrad King <brad.king@kitware.com>2012-01-18 09:12:00 -0500
commit849820219e84e251ad99121f738456f3743ba4fa (patch)
tree94c86c2af20055a69b48886740cdb4c518ab8aa3
parentfe760baa0af5287d8a27552fced1a646a042f1ed (diff)
downloadcmake-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.cmake11
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[^/]*")