diff options
author | Clyybber <darkmine956@gmail.com> | 2020-12-05 18:41:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-05 18:41:08 +0100 |
commit | d7f244180e84e4fd0fe7cd34298c8082bba14069 (patch) | |
tree | 32a8ce1c569f31d7dcec97a201859a24a1509c61 /testament/categories.nim | |
parent | 8178388a78a013c990e2a7a8e97e4595449e5944 (diff) | |
download | Nim-d7f244180e84e4fd0fe7cd34298c8082bba14069.tar.gz |
Retry commands in testament again (#16262)
Diffstat (limited to 'testament/categories.nim')
-rw-r--r-- | testament/categories.nim | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/testament/categories.nim b/testament/categories.nim index c48d611b1..c894bc9f9 100644 --- a/testament/categories.nim +++ b/testament/categories.nim @@ -482,6 +482,17 @@ proc makeSupTest(test, options: string, cat: Category): TTest = result.options = options result.startTime = epochTime() +const maxRetries = 3 +template retryCommand(call): untyped = + var res: typeof(call) + var backoff = 1 + for i in 0..<maxRetries: + res = call + if res.exitCode == QuitSuccess or i == maxRetries-1: break + sleep(backoff * 1000) + backoff *= 2 + res + proc testNimblePackages(r: var TResults; cat: Category; packageFilter: string, part: PkgPart) = if nimbleExe == "": echo "[Warning] - Cannot run nimble tests: Nimble binary not found." @@ -503,28 +514,28 @@ proc testNimblePackages(r: var TResults; cat: Category; packageFilter: string, p let buildPath = packagesDir / name if not dirExists(buildPath): - let (cloneCmd, cloneOutput, cloneStatus) = execCmdEx2("git", ["clone", url, buildPath]) + let (cloneCmd, cloneOutput, cloneStatus) = retryCommand execCmdEx2("git", ["clone", url, buildPath]) if cloneStatus != QuitSuccess: r.addResult(test, targetC, "", cloneCmd & "\n" & cloneOutput, reInstallFailed) continue if not useHead: - let (fetchCmd, fetchOutput, fetchStatus) = execCmdEx2("git", ["fetch", "--tags"], workingDir = buildPath) + let (fetchCmd, fetchOutput, fetchStatus) = retryCommand execCmdEx2("git", ["fetch", "--tags"], workingDir = buildPath) if fetchStatus != QuitSuccess: r.addResult(test, targetC, "", fetchCmd & "\n" & fetchOutput, reInstallFailed) continue - let (describeCmd, describeOutput, describeStatus) = execCmdEx2("git", ["describe", "--tags", "--abbrev=0"], workingDir = buildPath) + let (describeCmd, describeOutput, describeStatus) = retryCommand execCmdEx2("git", ["describe", "--tags", "--abbrev=0"], workingDir = buildPath) if describeStatus != QuitSuccess: r.addResult(test, targetC, "", describeCmd & "\n" & describeOutput, reInstallFailed) continue - let (checkoutCmd, checkoutOutput, checkoutStatus) = execCmdEx2("git", ["checkout", describeOutput.strip], workingDir = buildPath) + let (checkoutCmd, checkoutOutput, checkoutStatus) = retryCommand execCmdEx2("git", ["checkout", describeOutput.strip], workingDir = buildPath) if checkoutStatus != QuitSuccess: r.addResult(test, targetC, "", checkoutCmd & "\n" & checkoutOutput, reInstallFailed) continue - let (installDepsCmd, installDepsOutput, installDepsStatus) = execCmdEx2("nimble", ["install", "--depsOnly", "-y"], workingDir = buildPath) + let (installDepsCmd, installDepsOutput, installDepsStatus) = retryCommand execCmdEx2("nimble", ["install", "--depsOnly", "-y"], workingDir = buildPath) if installDepsStatus != QuitSuccess: r.addResult(test, targetC, "", "installing dependencies failed:\n$ " & installDepsCmd & "\n" & installDepsOutput, reInstallFailed) continue |