@@ -64,6 +64,12 @@ func ToRegistry(ctx context.Context, opts *Options) error {
64
64
if err != nil {
65
65
return err
66
66
}
67
+ var allError error
68
+ defer func () {
69
+ if err := policyContext .Destroy (); err != nil {
70
+ allError = fmt .Errorf ("error tearing down policy context: %v" , err )
71
+ }
72
+ }()
67
73
repos , err := docker .SearchRegistry (ctx , sys , src , "" , 1 << 10 )
68
74
if err != nil {
69
75
return err
@@ -115,7 +121,7 @@ func ToRegistry(ctx context.Context, opts *Options) error {
115
121
}
116
122
}
117
123
}
118
- return nil
124
+ return allError
119
125
}
120
126
121
127
func getRetryOptions () * retry.RetryOptions {
@@ -131,6 +137,27 @@ func getRetryOptions() *retry.RetryOptions {
131
137
}
132
138
133
139
func ImageNameToReference (sys * types.SystemContext , img string , auth map [string ]dtype.AuthConfig ) (types.ImageReference , error ) {
140
+ if err := reexecIfNecessaryForImages (img ); err != nil {
141
+ return nil , err
142
+ }
143
+ transport := alltransports .TransportFromImageName (img )
144
+ if transport != nil && transport .Name () == "containers-storage" {
145
+ logger .Info ("Using containers-storage as image transport" )
146
+ srcRef , err := alltransports .ParseImageName (img )
147
+ if err != nil {
148
+ return nil , fmt .Errorf ("invalid source name %s: %v" , img , err )
149
+ }
150
+ return srcRef , nil
151
+ }
152
+ if transport != nil && transport .Name () == "docker-daemon" {
153
+ logger .Info ("Using docker-daemon as image transport" )
154
+ srcRef , err := alltransports .ParseImageName (img )
155
+ if err != nil {
156
+ return nil , fmt .Errorf ("invalid source name %s: %v" , img , err )
157
+ }
158
+ return srcRef , nil
159
+ }
160
+
134
161
src , err := name .ParseReference (img )
135
162
if err != nil {
136
163
return nil , fmt .Errorf ("ref invalid source name %s: %v" , img , err )
@@ -174,15 +201,24 @@ func RegistryToImage(ctx context.Context, sys *types.SystemContext, src types.Im
174
201
if err != nil {
175
202
return err
176
203
}
177
- return retry .RetryIfNecessary (ctx , func () error {
204
+ var allError error
205
+ defer func () {
206
+ if err := policyContext .Destroy (); err != nil {
207
+ allError = fmt .Errorf ("error tearing down policy context: %v" , err )
208
+ }
209
+ }()
210
+ if err = retry .RetryIfNecessary (ctx , func () error {
178
211
_ , err = copy .Image (ctx , policyContext , destRef , src , & copy.Options {
179
212
SourceCtx : sys ,
180
213
DestinationCtx : sys ,
181
214
ImageListSelection : selection ,
182
215
ReportWriter : os .Stdout ,
183
216
})
184
217
return err
185
- }, getRetryOptions ())
218
+ }, getRetryOptions ()); err != nil {
219
+ return err
220
+ }
221
+ return allError
186
222
}
187
223
188
224
func ArchiveToImage (ctx context.Context , sys * types.SystemContext , src types.ImageReference , dst string , selection copy.ImageListSelection ) error {
@@ -195,15 +231,24 @@ func ArchiveToImage(ctx context.Context, sys *types.SystemContext, src types.Ima
195
231
if err != nil {
196
232
return err
197
233
}
198
- return retry .RetryIfNecessary (ctx , func () error {
234
+ var allError error
235
+ defer func () {
236
+ if err = policyContext .Destroy (); err != nil {
237
+ allError = fmt .Errorf ("error tearing down policy context: %v" , err )
238
+ }
239
+ }()
240
+ if err = retry .RetryIfNecessary (ctx , func () error {
199
241
_ , err = copy .Image (ctx , policyContext , destRef , src , & copy.Options {
200
242
SourceCtx : sys ,
201
243
DestinationCtx : sys ,
202
244
ImageListSelection : selection ,
203
245
ReportWriter : os .Stdout ,
204
246
})
205
247
return err
206
- }, getRetryOptions ())
248
+ }, getRetryOptions ()); err != nil {
249
+ return err
250
+ }
251
+ return allError
207
252
}
208
253
209
254
func getPolicyContext () (* signature.PolicyContext , error ) {
0 commit comments