@@ -16,6 +16,7 @@ package image
1616
1717import (
1818 "encoding/json"
19+ "fmt"
1920 "log"
2021 "os"
2122 "path/filepath"
@@ -33,7 +34,7 @@ func ValidateLayout(src string, refs []string, out *log.Logger) error {
3334
3435// Validate walks through the given .tar file and
3536// validates the manifest pointed to by the given refs
36- // or returns an error if the validation failed.
37+ //iiii or returns an error if the validation failed.
3738func Validate (tarFile string , refs []string , out * log.Logger ) error {
3839 f , err := os .Open (tarFile )
3940 if err != nil {
@@ -50,17 +51,37 @@ var validRefMediaTypes = []string{
5051}
5152
5253func validate (w walker , refs []string , out * log.Logger ) error {
53- for _ , r := range refs {
54- ref , err := findDescriptor (w , r )
55- if err != nil {
56- return err
54+ ds , err := listReferences (w )
55+ if err != nil {
56+ return err
57+ }
58+ if len (refs ) == 0 && len (ds ) == 0 {
59+ // TODO(runcom): ugly, we'll need a better way and library
60+ // to express log levels.
61+ // see https://github.com/opencontainers/image-spec/issues/288
62+ out .Print ("WARNING: no descriptors found" )
63+ }
64+
65+ if len (refs ) == 0 {
66+ for ref := range ds {
67+ refs = append (refs , ref )
68+ }
69+ }
70+
71+ for _ , ref := range refs {
72+ d , ok := ds [ref ]
73+ if ! ok {
74+ // TODO(runcom):
75+ // soften this error to a warning if the user didn't ask for any specific reference
76+ // with --ref but she's just validating the whole image.
77+ return fmt .Errorf ("reference %s not found" , ref )
5778 }
5879
59- if err = ref .validate (w , validRefMediaTypes ); err != nil {
80+ if err = d .validate (w , validRefMediaTypes ); err != nil {
6081 return err
6182 }
6283
63- m , err := findManifest (w , ref )
84+ m , err := findManifest (w , d )
6485 if err != nil {
6586 return err
6687 }
@@ -69,7 +90,7 @@ func validate(w walker, refs []string, out *log.Logger) error {
6990 return err
7091 }
7192 if out != nil {
72- out .Printf ("reference %q: OK" , r )
93+ out .Printf ("reference %q: OK" , ref )
7394 }
7495 }
7596 return nil
0 commit comments