1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-18 08:51:52 +08:00

ExternalProject: retry download on recoverable errors

In order to shorten the download failure of ExternalProject download
steps, a download retry is only done when a recoverable network
error is encountered.
This commit is contained in:
Thomas Bernard
2020-08-08 15:47:31 +02:00
parent bb1b37ea3b
commit f24e34975a
5 changed files with 46 additions and 29 deletions

View File

@@ -107,11 +107,15 @@ message(STATUS "Downloading...
dst='@LOCAL@'
timeout='@TIMEOUT_MSG@'"
)
set(download_retry_codes 7 6 8 15)
set(skip_url_list)
set(status_code)
foreach(i RANGE ${retry_number})
if(status_code IN_LIST download_retry_codes)
sleep_before_download(${i})
endif()
foreach(url @REMOTE@)
if(NOT url IN_LIST skip_url_list)
message(STATUS "Using src='${url}'")
@TLS_VERIFY_CODE@
@@ -152,6 +156,11 @@ foreach(i RANGE ${retry_number})
--- LOG END ---
"
)
if(NOT status_code IN_LIST download_retry_codes)
list(APPEND skip_url_list "${url}")
break()
endif()
endif()
endif()
endforeach()
endforeach()

View File

@@ -0,0 +1 @@
^[^0]

View File

@@ -0,0 +1 @@
.*

View File

@@ -0,0 +1,5 @@
include(ExternalProject)
set(source_dir "${CMAKE_CURRENT_BINARY_DIR}/DownloadTimeout")
file(REMOVE_RECURSE "${source_dir}")
file(MAKE_DIRECTORY "${source_dir}")
ExternalProject_Add(MyProj URL "http://cmake.org/invalid_file.tar.gz")

View File

@@ -38,6 +38,7 @@ set(RunCMake_TEST_OUTPUT_MERGE 0)
if(NOT RunCMake_GENERATOR MATCHES "Visual Studio")
__ep_test_with_build(LogOutputOnFailure)
__ep_test_with_build(LogOutputOnFailureMerged)
__ep_test_with_build(DownloadTimeout)
endif()
# We can't test the substitution when using the old MSYS due to