@@ -155,9 +155,8 @@ func (dpc *detectPrunedCacheID) Load(op *pb.Op, md *pb.OpMetadata, opt *solver.V
155155}
156156
157157func 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 ... )
161160 if err != nil {
162161 return nil , err
163162 }
@@ -198,7 +197,7 @@ func newVertex(dgst digest.Digest, op *pb.Op, opMeta *pb.OpMetadata, load func(d
198197 return vtx , nil
199198}
200199
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 ) {
202201 if dgst , ok := visited [dgst ]; ok {
203202 return dgst , nil
204203 }
@@ -235,30 +234,38 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
235234 return newDgst , nil
236235}
237236
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+
238243// loadLLB loads LLB.
239244// 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 ) {
241246 if len (def .Def ) == 0 {
242247 return solver.Edge {}, errors .New ("invalid empty definition" )
243248 }
244249
245- allOps := make (map [digest.Digest ]* pb. Op )
250+ allOps := make (map [digest.Digest ]* op )
246251
247252 var lastDgst digest.Digest
248253
249254 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 {
252257 return solver.Edge {}, errors .Wrap (err , "failed to parse llb proto op" )
253258 }
254259 dgst := digest .FromBytes (dt )
255260 if polEngine != nil {
256- if _ , err := polEngine .Evaluate (ctx , op .GetSource ()); err != nil {
261+ if _ , err := polEngine .Evaluate (ctx , pbop .GetSource ()); err != nil {
257262 return solver.Edge {}, errors .Wrap (err , "error evaluating the source policy" )
258263 }
259264 }
260-
261- allOps [dgst ] = & op
265+ allOps [dgst ] = & op {
266+ Op : & pbop ,
267+ Metadata : def .Metadata [string (dgst )],
268+ }
262269 lastDgst = dgst
263270 }
264271
@@ -300,7 +307,7 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
300307 return nil , errors .Errorf ("invalid missing input digest %s" , dgst )
301308 }
302309
303- if err := opsutils .Validate (op ); err != nil {
310+ if err := opsutils .Validate (op . Op ); err != nil {
304311 return nil , err
305312 }
306313
0 commit comments