@@ -191,12 +191,11 @@ func Download(local, remote string, opts ...Opt) (*Result, error) {
191
191
}
192
192
if _ , err := os .Stat (shadData ); err == nil {
193
193
logrus .Debugf ("file %q is cached as %q" , localPath , shadData )
194
- if shadDigestB , err := os .ReadFile (shadDigest ); err == nil {
194
+ if _ , err := os .Stat (shadDigest ); err == nil {
195
195
logrus .Debugf ("Comparing digest %q with the cached digest file %q, not computing the actual digest of %q" ,
196
196
o .expectedDigest , shadDigest , shadData )
197
- shadDigestS := strings .TrimSpace (string (shadDigestB ))
198
- if o .expectedDigest .String () != shadDigestS {
199
- return nil , fmt .Errorf ("expected digest %q does not match the cached digest %q" , o .expectedDigest .String (), shadDigestS )
197
+ if err := validateCachedDigest (shadDigest , o .expectedDigest ); err != nil {
198
+ return nil , err
200
199
}
201
200
if err := copyLocal (localPath , shadData , ext , o .decompress , "" , "" ); err != nil {
202
201
return nil , err
@@ -295,6 +294,9 @@ func copyLocal(dst, src, ext string, decompress bool, description string, expect
295
294
return err
296
295
}
297
296
297
+ if expectedDigest != "" {
298
+ logrus .Debugf ("verifying digest of local file %q (%s)" , srcPath , expectedDigest )
299
+ }
298
300
if err := validateLocalFileDigest (srcPath , expectedDigest ); err != nil {
299
301
return err
300
302
}
@@ -383,14 +385,28 @@ func decompressLocal(dst, src, ext string, description string) error {
383
385
return err
384
386
}
385
387
388
+ func validateCachedDigest (shadDigest string , expectedDigest digest.Digest ) error {
389
+ if expectedDigest == "" {
390
+ return nil
391
+ }
392
+ shadDigestB , err := os .ReadFile (shadDigest )
393
+ if err != nil {
394
+ return err
395
+ }
396
+ shadDigestS := strings .TrimSpace (string (shadDigestB ))
397
+ if shadDigestS != expectedDigest .String () {
398
+ return fmt .Errorf ("expected digest %q, got %q" , expectedDigest , shadDigestS )
399
+ }
400
+ return nil
401
+ }
402
+
386
403
func validateLocalFileDigest (localPath string , expectedDigest digest.Digest ) error {
387
404
if localPath == "" {
388
405
return fmt .Errorf ("validateLocalFileDigest: got empty localPath" )
389
406
}
390
407
if expectedDigest == "" {
391
408
return nil
392
409
}
393
- logrus .Debugf ("verifying digest of local file %q (%s)" , localPath , expectedDigest )
394
410
algo := expectedDigest .Algorithm ()
395
411
if ! algo .Available () {
396
412
return fmt .Errorf ("expected digest algorithm %q is not available" , algo )
0 commit comments