@@ -1326,21 +1326,38 @@ object Build {
1326
1326
Compile / resourceGenerators += Def .task {
1327
1327
import _root_ .scala .sys .process ._
1328
1328
import _root_ .scala .concurrent ._
1329
+ import _root_ .scala .concurrent .duration .Duration
1329
1330
import ExecutionContext .Implicits .global
1330
1331
val inkuireVersion = " 1.0.0-M3"
1331
1332
val inkuireLink = s " https://github.com/VirtusLab/Inkuire/releases/download/ $inkuireVersion/inkuire.js "
1332
1333
val inkuireDestinationFile = (Compile / resourceManaged).value / " dotty_res" / " scripts" / " inkuire.js"
1333
1334
sbt.IO .touch(inkuireDestinationFile)
1334
- val downloadProcess = (new java.net.URL (inkuireLink) #> inkuireDestinationFile).run()
1335
- val result : Future [Int ] = Future (blocking(downloadProcess.exitValue()))
1336
- val res = try {
1337
- Await .result(result, duration.Duration (60 , " sec" ))
1338
- } catch {
1339
- case _ : TimeoutException =>
1340
- downloadProcess.destroy()
1341
- throw new MessageOnlyException (s " Failed to fetch inkuire.js from $inkuireLink: Download timeout " )
1335
+
1336
+ def tryFetch (retries : Int , timeout : Duration ): Unit = {
1337
+ val downloadProcess = (new java.net.URL (inkuireLink) #> inkuireDestinationFile).run()
1338
+ val result : Future [Int ] = Future (blocking(downloadProcess.exitValue()))
1339
+ try {
1340
+ Await .result(result, timeout) match {
1341
+ case 0 =>
1342
+ case res if retries > 0 =>
1343
+ println(s " Failed to fetch inkuire.js from $inkuireLink: Error code $res. $retries retries left " )
1344
+ tryFetch(retries - 1 , timeout)
1345
+ case res => throw new MessageOnlyException (s " Failed to fetch inkuire.js from $inkuireLink: Error code $res" )
1346
+ }
1347
+ } catch {
1348
+ case e : TimeoutException =>
1349
+ downloadProcess.destroy()
1350
+ if (retries > 0 ) {
1351
+ println(s " Failed to fetch inkuire.js from $inkuireLink: Download timeout. $retries retries left " )
1352
+ tryFetch(retries - 1 , timeout)
1353
+ }
1354
+ else {
1355
+ throw new MessageOnlyException (s " Failed to fetch inkuire.js from $inkuireLink: Download timeout " )
1356
+ }
1357
+ }
1342
1358
}
1343
- if (res != 0 ) throw new MessageOnlyException (s " Failed to fetch inkuire.js from $inkuireLink: Error code $res" )
1359
+
1360
+ tryFetch(5 , Duration (60 , " s" ))
1344
1361
Seq (inkuireDestinationFile)
1345
1362
}.taskValue,
1346
1363
libraryDependencies ++= Dependencies .flexmarkDeps ++ Seq (
0 commit comments