@@ -69,30 +69,33 @@ async function unzip(
69
69
}
70
70
71
71
return new Promise < void > ( ( resolve , reject ) => {
72
- https . get ( url , ( res : Readable ) : void => {
73
- res
74
- . pipe ( unzipper . Parse ( ) )
75
- . on ( 'entry' , entry => {
76
- if ( ! entry . path . startsWith ( stripPrefix ) ) {
77
- process . stderr . write (
78
- `warning: skipping ${ entry . path } because it does not start with ${ stripPrefix } \n`
79
- )
80
- }
81
- const entryPath = `${ outputDirectory } /${ entry . path . substring (
82
- stripPrefix . length
83
- ) } `
84
- progress ( entryPath )
85
- if ( entryPath . endsWith ( '/' ) ) {
86
- mkdirp ( entryPath . replace ( / \/ $ / , '' ) )
87
- entry . autodrain ( )
88
- } else {
89
- entry . pipe ( fs . createWriteStream ( `${ entryPath } ` ) )
90
- }
91
- } )
92
- . on ( 'error' , reject )
93
- . on ( 'finish' , progress )
94
- . on ( 'finish' , resolve )
95
- } )
72
+ https
73
+ . get ( url , ( res : Readable ) : void => {
74
+ res
75
+ . on ( 'error' , reject )
76
+ . pipe ( unzipper . Parse ( ) )
77
+ . on ( 'entry' , entry => {
78
+ if ( ! entry . path . startsWith ( stripPrefix ) ) {
79
+ process . stderr . write (
80
+ `warning: skipping ${ entry . path } because it does not start with ${ stripPrefix } \n`
81
+ )
82
+ }
83
+ const entryPath = `${ outputDirectory } /${ entry . path . substring (
84
+ stripPrefix . length
85
+ ) } `
86
+ progress ( entryPath )
87
+ if ( entryPath . endsWith ( '/' ) ) {
88
+ mkdirp ( entryPath . replace ( / \/ $ / , '' ) )
89
+ entry . autodrain ( )
90
+ } else {
91
+ entry . pipe ( fs . createWriteStream ( `${ entryPath } ` ) )
92
+ }
93
+ } )
94
+ . on ( 'error' , reject )
95
+ . on ( 'finish' , progress )
96
+ . on ( 'finish' , resolve )
97
+ } )
98
+ . on ( 'error' , reject )
96
99
} )
97
100
}
98
101
@@ -237,13 +240,30 @@ export async function get(
237
240
)
238
241
}
239
242
const url = filtered [ 0 ] . resource . downloadUrl
240
- await unzip (
241
- url ,
242
- `${ artifactName } /` ,
243
- outputDirectory ,
244
- verbose ,
245
- flavor === 'full' ? unpackTarXZInZipFromURL : undefined
246
- )
243
+ let delayInSeconds = 1
244
+ for ( ; ; ) {
245
+ try {
246
+ await unzip (
247
+ url ,
248
+ `${ artifactName } /` ,
249
+ outputDirectory ,
250
+ verbose ,
251
+ flavor === 'full' ? unpackTarXZInZipFromURL : undefined
252
+ )
253
+ break
254
+ } catch ( e ) {
255
+ delayInSeconds *= 2
256
+ if ( delayInSeconds >= 60 ) {
257
+ throw e
258
+ }
259
+ process . stderr . write (
260
+ `Encountered problem downloading/extracting ${ url } : ${ e } ; Retrying in ${ delayInSeconds } seconds...\n`
261
+ )
262
+ await new Promise ( ( resolve , _reject ) =>
263
+ setTimeout ( resolve , delayInSeconds * 1000 )
264
+ )
265
+ }
266
+ }
247
267
}
248
268
return { artifactName, download, id}
249
269
}
0 commit comments