@@ -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,20 +234,29 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
235
234
return newDgst , nil
236
235
}
237
236
237
+ type op struct {
238
+ pb.Op
239
+ Metadata * pb.OpMetadata
240
+ }
241
+
242
+ func (o * op ) Unmarshal (data []byte ) error {
243
+ return o .Op .UnmarshalVT (data )
244
+ }
245
+
238
246
// loadLLB loads LLB.
239
247
// 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 ) {
248
+ 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
249
if len (def .Def ) == 0 {
242
250
return solver.Edge {}, errors .New ("invalid empty definition" )
243
251
}
244
252
245
- allOps := make (map [digest.Digest ]* pb. Op )
253
+ allOps := make (map [digest.Digest ]* op )
246
254
247
255
var lastDgst digest.Digest
248
256
249
257
for _ , dt := range def .Def {
250
- var op pb. Op
251
- if err := op .UnmarshalVT (dt ); err != nil {
258
+ var op op
259
+ if err := op .Unmarshal (dt ); err != nil {
252
260
return solver.Edge {}, errors .Wrap (err , "failed to parse llb proto op" )
253
261
}
254
262
dgst := digest .FromBytes (dt )
@@ -257,6 +265,7 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
257
265
return solver.Edge {}, errors .Wrap (err , "error evaluating the source policy" )
258
266
}
259
267
}
268
+ op .Metadata = def .Metadata [string (dgst )]
260
269
261
270
allOps [dgst ] = & op
262
271
lastDgst = dgst
@@ -300,7 +309,7 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
300
309
return nil , errors .Errorf ("invalid missing input digest %s" , dgst )
301
310
}
302
311
303
- if err := opsutils .Validate (op ); err != nil {
312
+ if err := opsutils .Validate (& op . Op ); err != nil {
304
313
return nil , err
305
314
}
306
315
0 commit comments