@@ -14,7 +14,6 @@ import (
1414 digest "github.com/opencontainers/go-digest"
1515 ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
1616 "github.com/pkg/errors"
17- "google.golang.org/protobuf/proto"
1817)
1918
2019type vertex struct {
@@ -208,7 +207,6 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
208207 return "" , errors .Errorf ("invalid missing input digest %s" , dgst )
209208 }
210209
211- var mutated bool
212210 for _ , input := range op .Inputs {
213211 select {
214212 case <- ctx .Done ():
@@ -220,25 +218,20 @@ func recomputeDigests(ctx context.Context, all map[digest.Digest]*pb.Op, visited
220218 if err != nil {
221219 return "" , err
222220 }
223- if digest .Digest (input .Digest ) != iDgst {
224- mutated = true
225- input .Digest = string (iDgst )
226- }
227- }
228-
229- if ! mutated {
230- visited [dgst ] = dgst
231- return dgst , nil
221+ input .Digest = string (iDgst )
232222 }
233223
234- dt , err := deterministicMarshal ( op )
224+ dt , err := op . Marshal ( )
235225 if err != nil {
236226 return "" , err
237227 }
228+
238229 newDgst := digest .FromBytes (dt )
230+ if newDgst != dgst {
231+ all [newDgst ] = op
232+ delete (all , dgst )
233+ }
239234 visited [dgst ] = newDgst
240- all [newDgst ] = op
241- delete (all , dgst )
242235 return newDgst , nil
243236}
244237
@@ -250,7 +243,6 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
250243 }
251244
252245 allOps := make (map [digest.Digest ]* pb.Op )
253- mutatedDigests := make (map [digest.Digest ]digest.Digest ) // key: old, val: new
254246
255247 var lastDgst digest.Digest
256248
@@ -261,27 +253,18 @@ func loadLLB(ctx context.Context, def *pb.Definition, polEngine SourcePolicyEval
261253 }
262254 dgst := digest .FromBytes (dt )
263255 if polEngine != nil {
264- mutated , err := polEngine .Evaluate (ctx , op .GetSource ())
265- if err != nil {
256+ if _ , err := polEngine .Evaluate (ctx , op .GetSource ()); err != nil {
266257 return solver.Edge {}, errors .Wrap (err , "error evaluating the source policy" )
267258 }
268- if mutated {
269- dtMutated , err := deterministicMarshal (& op )
270- if err != nil {
271- return solver.Edge {}, err
272- }
273- dgstMutated := digest .FromBytes (dtMutated )
274- mutatedDigests [dgst ] = dgstMutated
275- dgst = dgstMutated
276- }
277259 }
260+
278261 allOps [dgst ] = & op
279262 lastDgst = dgst
280263 }
281264
265+ mutatedDigests := make (map [digest.Digest ]digest.Digest ) // key: old, val: new
282266 for dgst := range allOps {
283- _ , err := recomputeDigests (ctx , allOps , mutatedDigests , dgst )
284- if err != nil {
267+ if _ , err := recomputeDigests (ctx , allOps , mutatedDigests , dgst ); err != nil {
285268 return solver.Edge {}, err
286269 }
287270 }
@@ -400,7 +383,3 @@ func fileOpName(actions []*pb.FileAction) string {
400383
401384 return strings .Join (names , ", " )
402385}
403-
404- func deterministicMarshal [Message proto.Message ](m Message ) ([]byte , error ) {
405- return proto.MarshalOptions {Deterministic : true }.Marshal (m )
406- }
0 commit comments