From 871675be9b79d4de73cd0f58a674b112feda3742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Thu, 17 Apr 2025 15:30:27 +0200 Subject: [PATCH] c8d/delete: Extract untagReferences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Gronowski --- daemon/containerd/image_delete.go | 49 +++++++++++++------------------ 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/daemon/containerd/image_delete.go b/daemon/containerd/image_delete.go index 8308150eff..6325e29cc0 100644 --- a/daemon/containerd/image_delete.go +++ b/daemon/containerd/image_delete.go @@ -96,20 +96,7 @@ func (i *ImageService) ImageDelete(ctx context.Context, imageRef string, force, c &= ^conflictActiveReference } if named != nil && len(sameRef) > 0 && len(sameRef) != len(all) { - var records []imagetypes.DeleteResponse - for _, ref := range sameRef { - // TODO: Add with target - err := i.images.Delete(ctx, ref.Name) - if err != nil { - return nil, err - } - if nn, err := reference.ParseNormalizedNamed(ref.Name); err == nil { - familiarRef := reference.FamiliarString(nn) - i.logImageEvent(ref, familiarRef, events.ActionUnTag) - records = append(records, imagetypes.DeleteResponse{Untagged: familiarRef}) - } - } - return records, nil + return i.untagReferences(ctx, sameRef) } } else { imgID = image.ID(img.Target.Digest) @@ -127,20 +114,7 @@ func (i *ImageService) ImageDelete(ctx context.Context, imageRef string, force, return nil, err } if len(sameRef) != len(all) { - var records []imagetypes.DeleteResponse - for _, ref := range sameRef { - // TODO: Add with target - err := i.images.Delete(ctx, ref.Name) - if err != nil { - return nil, err - } - if nn, err := reference.ParseNormalizedNamed(ref.Name); err == nil { - familiarRef := reference.FamiliarString(nn) - i.logImageEvent(ref, familiarRef, events.ActionUnTag) - records = append(records, imagetypes.DeleteResponse{Untagged: familiarRef}) - } - } - return records, nil + return i.untagReferences(ctx, sameRef) } else if len(all) > 1 && !force { // Since only a single used reference, remove all active // TODO: Consider keeping the conflict and changing active @@ -411,6 +385,25 @@ func (*imageDeleteConflict) Conflict() {} // nil if there are none. It takes a bitmask representing a // filter for which conflict types the caller cares about, // and will only check for these conflict types. + +// untagReferences deletes the given image references and returns the appropriate response records +func (i *ImageService) untagReferences(ctx context.Context, refs []c8dimages.Image) ([]imagetypes.DeleteResponse, error) { + var records []imagetypes.DeleteResponse + for _, ref := range refs { + // TODO: Add with target + err := i.images.Delete(ctx, ref.Name) + if err != nil { + return nil, err + } + if nn, err := reference.ParseNormalizedNamed(ref.Name); err == nil { + familiarRef := reference.FamiliarString(nn) + i.logImageEvent(ref, familiarRef, events.ActionUnTag) + records = append(records, imagetypes.DeleteResponse{Untagged: familiarRef}) + } + } + return records, nil +} + func (i *ImageService) checkImageDeleteConflict(ctx context.Context, imgID image.ID, all []c8dimages.Image, mask conflictType) error { if mask&conflictRunningContainer != 0 { running := func(c *container.Container) bool {