@@ -7,9 +7,10 @@ import (
77 "io"
88 "strings"
99
10+ "github.com/buildpacks/imgutil/remote"
11+
1012 "github.com/buildpacks/imgutil"
1113 "github.com/buildpacks/imgutil/local"
12- "github.com/buildpacks/imgutil/remote"
1314 "github.com/buildpacks/lifecycle/auth"
1415 "github.com/docker/docker/api/types"
1516 "github.com/docker/docker/client"
@@ -38,50 +39,53 @@ func NewFetcher(logger logging.Logger, docker client.CommonAPIClient) *Fetcher {
3839var ErrNotFound = errors .New ("not found" )
3940
4041func (f * Fetcher ) Fetch (ctx context.Context , name string , daemon bool , pullPolicy config.PullPolicy ) (imgutil.Image , error ) {
41- if daemon {
42- if pullPolicy == config .PullNever {
43- return f .fetchDaemonImage (name )
44- } else if pullPolicy == config .PullIfNotPresent {
45- img , err := f .fetchDaemonImage (name )
46- if err == nil || ! errors .Is (err , ErrNotFound ) {
47- return img , err
48- }
42+ if ! daemon {
43+ return f .fetchRemoteImage (name )
44+ }
45+
46+ switch pullPolicy {
47+ case config .PullNever :
48+ img , err := f .fetchDaemonImage (name )
49+ return img , err
50+ case config .PullIfNotPresent :
51+ img , err := f .fetchDaemonImage (name )
52+ if err == nil || ! errors .Is (err , ErrNotFound ) {
53+ return img , err
4954 }
5055 }
5156
52- image , err := remote .NewImage (name , authn .DefaultKeychain , remote .FromBaseImage (name ))
53- if err != nil {
57+ f .logger .Debugf ("Pulling image %s" , style .Symbol (name ))
58+ err := f .pullImage (ctx , name )
59+ if err != nil && ! errors .Is (err , ErrNotFound ) {
5460 return nil , err
5561 }
5662
57- remoteFound := image .Found ()
63+ return f .fetchDaemonImage (name )
64+ }
5865
59- if daemon {
60- if remoteFound {
61- f .logger .Debugf ("Pulling image %s" , style .Symbol (name ))
62- if err := f .pullImage (ctx , name ); err != nil {
63- return nil , err
64- }
65- }
66- return f .fetchDaemonImage (name )
66+ func (f * Fetcher ) fetchDaemonImage (name string ) (imgutil.Image , error ) {
67+ image , err := local .NewImage (name , f .docker , local .FromBaseImage (name ))
68+ if err != nil {
69+ return nil , err
6770 }
6871
69- if ! remoteFound {
70- return nil , errors .Wrapf (ErrNotFound , "image %s does not exist in registry " , style .Symbol (name ))
72+ if ! image . Found () {
73+ return nil , errors .Wrapf (ErrNotFound , "image %s does not exist on the daemon " , style .Symbol (name ))
7174 }
7275
7376 return image , nil
7477}
7578
76- func (f * Fetcher ) fetchDaemonImage (name string ) (imgutil.Image , error ) {
77- image , err := local .NewImage (name , f . docker , local .FromBaseImage (name ))
79+ func (f * Fetcher ) fetchRemoteImage (name string ) (imgutil.Image , error ) {
80+ image , err := remote .NewImage (name , authn . DefaultKeychain , remote .FromBaseImage (name ))
7881 if err != nil {
7982 return nil , err
8083 }
8184
8285 if ! image .Found () {
83- return nil , errors .Wrapf (ErrNotFound , "image %s does not exist on the daemon " , style .Symbol (name ))
86+ return nil , errors .Wrapf (ErrNotFound , "image %s does not exist in registry " , style .Symbol (name ))
8487 }
88+
8589 return image , nil
8690}
8791
@@ -90,10 +94,13 @@ func (f *Fetcher) pullImage(ctx context.Context, imageID string) error {
9094 if err != nil {
9195 return err
9296 }
93- rc , err := f .docker .ImagePull (ctx , imageID , types.ImagePullOptions {
94- RegistryAuth : regAuth ,
95- })
97+
98+ rc , err := f .docker .ImagePull (ctx , imageID , types.ImagePullOptions {RegistryAuth : regAuth })
9699 if err != nil {
100+ if client .IsErrNotFound (err ) {
101+ return errors .Wrapf (ErrNotFound , "image %s does not exist on the daemon" , style .Symbol (imageID ))
102+ }
103+
97104 return err
98105 }
99106
0 commit comments