@@ -164,7 +164,7 @@ func Download(ctx context.Context, local, remote string, opts ...Opt) (*Result,
164
164
165
165
ext := path .Ext (remote )
166
166
if IsLocal (remote ) {
167
- if err := copyLocal (localPath , remote , ext , o .decompress , o .description , o .expectedDigest ); err != nil {
167
+ if err := copyLocal (ctx , localPath , remote , ext , o .decompress , o .description , o .expectedDigest ); err != nil {
168
168
return nil , err
169
169
}
170
170
res := & Result {
@@ -199,11 +199,11 @@ func Download(ctx context.Context, local, remote string, opts ...Opt) (*Result,
199
199
if err := validateCachedDigest (shadDigest , o .expectedDigest ); err != nil {
200
200
return nil , err
201
201
}
202
- if err := copyLocal (localPath , shadData , ext , o .decompress , "" , "" ); err != nil {
202
+ if err := copyLocal (ctx , localPath , shadData , ext , o .decompress , "" , "" ); err != nil {
203
203
return nil , err
204
204
}
205
205
} else {
206
- if err := copyLocal (localPath , shadData , ext , o .decompress , o .description , o .expectedDigest ); err != nil {
206
+ if err := copyLocal (ctx , localPath , shadData , ext , o .decompress , o .description , o .expectedDigest ); err != nil {
207
207
return nil , err
208
208
}
209
209
}
@@ -228,7 +228,7 @@ func Download(ctx context.Context, local, remote string, opts ...Opt) (*Result,
228
228
return nil , err
229
229
}
230
230
// no need to pass the digest to copyLocal(), as we already verified the digest
231
- if err := copyLocal (localPath , shadData , ext , o .decompress , "" , "" ); err != nil {
231
+ if err := copyLocal (ctx , localPath , shadData , ext , o .decompress , "" , "" ); err != nil {
232
232
return nil , err
233
233
}
234
234
if shadDigest != "" && o .expectedDigest != "" {
@@ -336,7 +336,7 @@ func canonicalLocalPath(s string) (string, error) {
336
336
return localpathutil .Expand (s )
337
337
}
338
338
339
- func copyLocal (dst , src , ext string , decompress bool , description string , expectedDigest digest.Digest ) error {
339
+ func copyLocal (ctx context. Context , dst , src , ext string , decompress bool , description string , expectedDigest digest.Digest ) error {
340
340
srcPath , err := canonicalLocalPath (src )
341
341
if err != nil {
342
342
return err
@@ -357,37 +357,33 @@ func copyLocal(dst, src, ext string, decompress bool, description string, expect
357
357
if err != nil {
358
358
return err
359
359
}
360
- if _ , ok := Decompressor (ext ); ok && decompress {
361
- return decompressLocal (dstPath , srcPath , ext , description )
360
+ if decompress {
361
+ command := decompressor (ext )
362
+ if command != "" {
363
+ return decompressLocal (ctx , command , dstPath , srcPath , ext , description )
364
+ }
362
365
}
363
366
// TODO: progress bar for copy
364
367
return fs .CopyFile (dstPath , srcPath )
365
368
}
366
369
367
- func Decompressor (ext string ) ([]string , bool ) {
368
- var program string
370
+ func decompressor (ext string ) string {
369
371
switch ext {
370
372
case ".gz" :
371
- program = "gzip"
373
+ return "gzip"
372
374
case ".bz2" :
373
- program = "bzip2"
375
+ return "bzip2"
374
376
case ".xz" :
375
- program = "xz"
377
+ return "xz"
376
378
case ".zst" :
377
- program = "zstd"
379
+ return "zstd"
378
380
default :
379
- return nil , false
381
+ return ""
380
382
}
381
- // -d --decompress
382
- return []string {program , "-d" }, true
383
383
}
384
384
385
- func decompressLocal (dst , src , ext , description string ) error {
386
- command , found := Decompressor (ext )
387
- if ! found {
388
- return fmt .Errorf ("decompressLocal: unknown extension %s" , ext )
389
- }
390
- logrus .Infof ("decompressing %s with %v" , ext , command )
385
+ func decompressLocal (ctx context.Context , decompressCmd , dst , src , ext , description string ) error {
386
+ logrus .Infof ("decompressing %s with %v" , ext , decompressCmd )
391
387
392
388
st , err := os .Stat (src )
393
389
if err != nil {
@@ -412,7 +408,7 @@ func decompressLocal(dst, src, ext, description string) error {
412
408
}
413
409
defer out .Close ()
414
410
buf := new (bytes.Buffer )
415
- cmd := exec .Command ( command [ 0 ], command [ 1 :] ... )
411
+ cmd := exec .CommandContext ( ctx , decompressCmd , "-d" ) // -d --decompress
416
412
cmd .Stdin = bar .NewProxyReader (in )
417
413
cmd .Stdout = out
418
414
cmd .Stderr = buf
0 commit comments