55	"errors" 
66	"slices" 
77
8+ 	cerrdefs "github.com/containerd/errdefs" 
89	digest "github.com/opencontainers/go-digest" 
910)
1011
@@ -189,24 +190,28 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
189190		if  (remote  ==  nil  ||  opt .CompressionOpt  !=  nil ) &&  opt .Mode  !=  CacheExportModeRemoteOnly  {
190191			res , err  :=  cm .results .Load (ctx , res )
191192			if  err  !=  nil  {
192- 				return  nil , err 
193- 			}
194- 			remotes , err  :=  opt .ResolveRemotes (ctx , res )
195- 			if  err  !=  nil  {
196- 				return  nil , err 
197- 			}
198- 			res .Release (context .TODO ())
199- 			if  remote  ==  nil  &&  len (remotes ) >  0  {
200- 				remote , remotes  =  remotes [0 ], remotes [1 :] // pop the first element 
201- 			}
202- 			if  opt .CompressionOpt  !=  nil  {
203- 				for  _ , r  :=  range  remotes  { // record all remaining remotes as well 
204- 					results  =  append (results , CacheExportResult {
205- 						CreatedAt :  v .CreatedAt ,
206- 						Result :     r ,
207- 						EdgeVertex : k .vtx ,
208- 						EdgeIndex :  k .output ,
209- 					})
193+ 				if  ! errors .Is (err , cerrdefs .ErrNotFound ) {
194+ 					return  nil , err 
195+ 				}
196+ 				remote  =  nil 
197+ 			} else  {
198+ 				remotes , err  :=  opt .ResolveRemotes (ctx , res )
199+ 				if  err  !=  nil  {
200+ 					return  nil , err 
201+ 				}
202+ 				res .Release (context .TODO ())
203+ 				if  remote  ==  nil  &&  len (remotes ) >  0  {
204+ 					remote , remotes  =  remotes [0 ], remotes [1 :] // pop the first element 
205+ 				}
206+ 				if  opt .CompressionOpt  !=  nil  {
207+ 					for  _ , r  :=  range  remotes  { // record all remaining remotes as well 
208+ 						results  =  append (results , CacheExportResult {
209+ 							CreatedAt :  v .CreatedAt ,
210+ 							Result :     r ,
211+ 							EdgeVertex : k .vtx ,
212+ 							EdgeIndex :  k .output ,
213+ 						})
214+ 					}
210215				}
211216			}
212217		}
@@ -232,7 +237,7 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
232237		for  _ , dep  :=  range  deps  {
233238			rec , err  :=  dep .CacheKey .Exporter .ExportTo (ctx , t , opt )
234239			if  err  !=  nil  {
235- 				return   nil ,  err 
240+ 				continue 
236241			}
237242			for  _ , r  :=  range  rec  {
238243				srcs [i ] =  append (srcs [i ], CacheLink {Src : r , Selector : string (dep .Selector )})
@@ -244,7 +249,7 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
244249		for  _ , de  :=  range  e .edge .secondaryExporters  {
245250			recs , err  :=  de .cacheKey .CacheKey .Exporter .ExportTo (mainCtx , t , opt )
246251			if  err  !=  nil  {
247- 				return   nil ,  nil 
252+ 				continue 
248253			}
249254			for  _ , r  :=  range  recs  {
250255				srcs [de .index ] =  append (srcs [de .index ], CacheLink {Src : r , Selector : de .cacheKey .Selector .String ()})
@@ -261,6 +266,14 @@ func (e *exporter) ExportTo(ctx context.Context, t CacheExporterTarget, opt Cach
261266		}
262267	}
263268
269+ 	// validate deps are present 
270+ 	for  _ , deps  :=  range  srcs  {
271+ 		if  len (deps ) ==  0  {
272+ 			res [e ] =  nil 
273+ 			return  res [e ], nil 
274+ 		}
275+ 	}
276+ 
264277	if  v  !=  nil  &&  len (deps ) ==  0  {
265278		cm  :=  v .cacheManager 
266279		key  :=  cm .getID (v .key )
0 commit comments