@@ -81,10 +81,10 @@ type Store interface {
81
81
// GC removes all unused or partially downloaded images.
82
82
GC () error
83
83
84
- // GetImagePathAndVirtualSize returns the path to image data
85
- // and virtual size for the specified image. It accepts
86
- // an image reference or a digest.
87
- GetImagePathAndVirtualSize (ref string ) (string , uint64 , error )
84
+ // GetImagePathDigestAndVirtualSize returns the path to image
85
+ // data, the digest and the virtual size for the specified
86
+ // image. It accepts an image reference or a digest.
87
+ GetImagePathDigestAndVirtualSize (ref string ) (string , digest. Digest , uint64 , error )
88
88
89
89
// SetRefGetter sets a function that will be used to determine
90
90
// the set of images that are currently in use.
@@ -472,30 +472,33 @@ func (s *FileStore) GC() error {
472
472
return nil
473
473
}
474
474
475
- // GetImagePathAndVirtualSize implements GC method of Store interface.
476
- func (s * FileStore ) GetImagePathAndVirtualSize (ref string ) (string , uint64 , error ) {
475
+ // GetImagePathDigestAndVirtualSize implements GetImagePathDigestAndVirtualSize method of Store interface.
476
+ func (s * FileStore ) GetImagePathDigestAndVirtualSize (ref string ) (string , digest. Digest , uint64 , error ) {
477
477
s .Lock ()
478
478
defer s .Unlock ()
479
- glog .V (3 ).Infof ("GetImagePathAndVirtualSize (): %q" , ref )
479
+ glog .V (3 ).Infof ("GetImagePathDigestAndVirtualSize (): %q" , ref )
480
480
481
481
var pathViaDigest , pathViaName string
482
482
// parsing digest as ref gives bad results
483
- if d , err := digest .Parse (ref ); err == nil {
483
+ d , err := digest .Parse (ref )
484
+ if err == nil {
484
485
if d .Algorithm () != digest .SHA256 {
485
- return "" , 0 , fmt .Errorf ("bad image digest (need sha256): %q" , d )
486
+ return "" , "" , 0 , fmt .Errorf ("bad image digest (need sha256): %q" , d )
486
487
}
487
488
pathViaDigest = s .dataFileName (d .Hex ())
488
489
} else {
489
490
parsed , err := reference .Parse (ref )
490
491
if err != nil {
491
- return "" , 0 , fmt .Errorf ("bad image reference %q: %v" , ref , err )
492
+ return "" , "" , 0 , fmt .Errorf ("bad image reference %q: %v" , ref , err )
492
493
}
493
494
495
+ d = ""
494
496
if digested , ok := parsed .(reference.Digested ); ok {
495
497
if digested .Digest ().Algorithm () != digest .SHA256 {
496
- return "" , 0 , fmt .Errorf ("bad image digest (need sha256): %q" , digested .Digest ())
498
+ return "" , "" , 0 , fmt .Errorf ("bad image digest (need sha256): %q" , digested .Digest ())
497
499
}
498
- pathViaDigest = s .dataFileName (digested .Digest ().Hex ())
500
+ d = digested .Digest ()
501
+ pathViaDigest = s .dataFileName (d .Hex ())
499
502
}
500
503
501
504
if named , ok := parsed .(reference.Named ); ok && named .Name () != "" {
@@ -504,35 +507,36 @@ func (s *FileStore) GetImagePathAndVirtualSize(ref string) (string, uint64, erro
504
507
glog .Warningf ("error reading link %q: %v" , pathViaName , err )
505
508
} else {
506
509
pathViaName = filepath .Join (s .linkDir (), pathViaName )
510
+ d = digest .NewDigestFromHex (string (digest .SHA256 ), filepath .Base (pathViaName ))
507
511
}
508
512
}
509
513
}
510
514
511
515
path := pathViaDigest
512
516
switch {
513
517
case pathViaDigest == "" && pathViaName == "" :
514
- return "" , 0 , fmt .Errorf ("bad image reference %q" , ref )
518
+ return "" , "" , 0 , fmt .Errorf ("bad image reference %q" , ref )
515
519
case pathViaDigest == "" :
516
520
path = pathViaName
517
521
case pathViaName != "" :
518
522
fi1 , err := os .Stat (pathViaName )
519
523
if err != nil {
520
- return "" , 0 , err
524
+ return "" , "" , 0 , err
521
525
}
522
526
fi2 , err := os .Stat (pathViaDigest )
523
527
if err != nil {
524
- return "" , 0 , err
528
+ return "" , "" , 0 , err
525
529
}
526
530
if ! os .SameFile (fi1 , fi2 ) {
527
- return "" , 0 , fmt .Errorf ("digest / name path mismatch: %q vs %q" , pathViaDigest , pathViaName )
531
+ return "" , "" , 0 , fmt .Errorf ("digest / name path mismatch: %q vs %q" , pathViaDigest , pathViaName )
528
532
}
529
533
}
530
534
531
535
vsize , err := s .vsizeFunc (path )
532
536
if err != nil {
533
- return "" , 0 , fmt .Errorf ("error getting image size for %q: %v" , path , err )
537
+ return "" , "" , 0 , fmt .Errorf ("error getting image size for %q: %v" , path , err )
534
538
}
535
- return path , vsize , nil
539
+ return path , d , vsize , nil
536
540
}
537
541
538
542
// SetRefGetter implements SetRefGetter method of Store interface.
0 commit comments