@@ -155,9 +155,8 @@ func (dpc *detectPrunedCacheID) Load(op *pb.Op, md *pb.OpMetadata, opt *solver.V
155
155
}
156
156
157
157
func Load (ctx context.Context , def * pb.Definition , polEngine SourcePolicyEvaluator , opts ... LoadOpt ) (solver.Edge , error ) {
158
- return loadLLB (ctx , def , polEngine , func (dgst digest.Digest , pbOp * pb.Op , load func (digest.Digest ) (solver.Vertex , error )) (solver.Vertex , error ) {
159
- opMetadata := def .Metadata [string (dgst )]
160
- vtx , err := newVertex (dgst , pbOp , opMetadata , load , opts ... )
158
+ return loadLLB (ctx , def , polEngine , func (dgst digest.Digest , op * op , load func (digest.Digest ) (solver.Vertex , error )) (solver.Vertex , error ) {
159
+ vtx , err := newVertex (dgst , op .Op , op .Metadata , load , opts ... )
161
160
if err != nil {
162
161
return nil , err
163
162
}
@@ -198,7 +197,7 @@ func newVertex(dgst digest.Digest, op *pb.Op, opMeta *pb.OpMetadata, load func(d
198
197
return vtx , nil
199
198
}
200
199
201
- func recomputeDigests (ctx context.Context , all map [digest.Digest ]* pb. Op , visited map [digest.Digest ]digest.Digest , dgst digest.Digest ) (digest.Digest , error ) {
200
+ func recomputeDigests (ctx context.Context , all map [digest.Digest ]* op , visited map [digest.Digest ]digest.Digest , dgst digest.Digest ) (digest.Digest , error ) {
202
201
if dgst , ok := visited [dgst ]; ok {
203
202
return dgst , nil
204
203
}
@@ -235,30 +234,38 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
235
234
return newDgst , nil
236
235
}
237
236
237
+ // op is a private wrapper around pb.Op that includes its metadata.
238
+ type op struct {
239
+ * pb.Op
240
+ Metadata * pb.OpMetadata
241
+ }
242
+
238
243
// loadLLB loads LLB.
239
244
// fn is executed sequentially.
240
- func loadLLB (ctx context.Context , def * pb.Definition , polEngine SourcePolicyEvaluator , fn func (digest.Digest , * pb. Op , func (digest.Digest ) (solver.Vertex , error )) (solver.Vertex , error )) (solver.Edge , error ) {
245
+ func loadLLB (ctx context.Context , def * pb.Definition , polEngine SourcePolicyEvaluator , fn func (digest.Digest , * op , func (digest.Digest ) (solver.Vertex , error )) (solver.Vertex , error )) (solver.Edge , error ) {
241
246
if len (def .Def ) == 0 {
242
247
return solver.Edge {}, errors .New ("invalid empty definition" )
243
248
}
244
249
245
- allOps := make (map [digest.Digest ]* pb. Op )
250
+ allOps := make (map [digest.Digest ]* op )
246
251
247
252
var lastDgst digest.Digest
248
253
249
254
for _ , dt := range def .Def {
250
- var op pb.Op
251
- if err := op . UnmarshalVT (dt ); err != nil {
255
+ var pbop pb.Op
256
+ if err := pbop . Unmarshal (dt ); err != nil {
252
257
return solver.Edge {}, errors .Wrap (err , "failed to parse llb proto op" )
253
258
}
254
259
dgst := digest .FromBytes (dt )
255
260
if polEngine != nil {
256
- if _ , err := polEngine .Evaluate (ctx , op .GetSource ()); err != nil {
261
+ if _ , err := polEngine .Evaluate (ctx , pbop .GetSource ()); err != nil {
257
262
return solver.Edge {}, errors .Wrap (err , "error evaluating the source policy" )
258
263
}
259
264
}
260
-
261
- allOps [dgst ] = & op
265
+ allOps [dgst ] = & op {
266
+ Op : & pbop ,
267
+ Metadata : def .Metadata [string (dgst )],
268
+ }
262
269
lastDgst = dgst
263
270
}
264
271
@@ -300,7 +307,7 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
300
307
return nil , errors .Errorf ("invalid missing input digest %s" , dgst )
301
308
}
302
309
303
- if err := opsutils .Validate (op ); err != nil {
310
+ if err := opsutils .Validate (op . Op ); err != nil {
304
311
return nil , err
305
312
}
306
313
0 commit comments