@@ -94,11 +94,10 @@ func Update(fi *sif.FileImage, ii v1.ImageIndex, opts ...UpdateOpt) error {
9494 }
9595
9696 // Delete existing blobs from the SIF except those we want to keep.
97- if err := deleteBlobsExcept (fi , keepBlobs ); err != nil {
98- return err
99- }
100- // Delete old RootIndex.
101- if err := deleteRootIndex (fi ); err != nil {
97+ if err := fi .DeleteObjects (selectBlobsExcept (keepBlobs ),
98+ sif .OptDeleteZero (true ),
99+ sif .OptDeleteCompact (true ),
100+ ); err != nil {
102101 return err
103102 }
104103
@@ -309,33 +308,13 @@ func readCacheBlob(digest v1.Hash, cacheDir string) (io.ReadCloser, error) {
309308 return f , nil
310309}
311310
312- // deleteBlobsExcept removes all OCI.Blob descriptors from fi , except those with
311+ // selectBlobsExcept selects all OCI.RootIndex/OCI. Blob descriptors, except those with
313312// digests listed in keep.
314- func deleteBlobsExcept (fi * sif.FileImage , keep []v1.Hash ) error {
315- descs , err := fi .GetDescriptors (sif .WithDataType (sif .DataOCIBlob ))
316- if err != nil {
317- return err
318- }
319- for _ , d := range descs {
320- dd , err := d .OCIBlobDigest ()
321- if err != nil {
322- return err
323- }
324- if slices .Contains (keep , dd ) {
325- continue
313+ func selectBlobsExcept (keep []v1.Hash ) sif.DescriptorSelectorFunc {
314+ return func (d sif.Descriptor ) (bool , error ) {
315+ if h , err := d .OCIBlobDigest (); err == nil && ! slices .Contains (keep , h ) {
316+ return true , nil
326317 }
327- if err := fi .DeleteObject (d .ID (), sif .OptDeleteZero (true )); err != nil {
328- return err
329- }
330- }
331- return nil
332- }
333-
334- // deleteRootIndex removes the RootIndex from a the SIF fi.
335- func deleteRootIndex (fi * sif.FileImage ) error {
336- desc , err := fi .GetDescriptor (sif .WithDataType (sif .DataOCIRootIndex ))
337- if err != nil {
338- return err
318+ return false , nil
339319 }
340- return fi .DeleteObject (desc .ID ())
341320}
0 commit comments