diff --git a/cmd/nerdctl/image/image_list_test.go b/cmd/nerdctl/image/image_list_test.go index 01acaf29a02..b024a194f1a 100644 --- a/cmd/nerdctl/image/image_list_test.go +++ b/cmd/nerdctl/image/image_list_test.go @@ -17,6 +17,7 @@ package image import ( + "errors" "fmt" "slices" "strings" @@ -258,13 +259,13 @@ RUN echo "actually creating a layer so that docker sets the createdAt time" Description: "since=non-exists-image", Require: nerdtest.NerdctlNeedsFixing("https://github.com/containerd/nerdctl/issues/3511"), Command: test.Command("images", "--filter", "since=non-exists-image"), - Expected: test.Expects(-1, nil, nil), + Expected: test.Expects(-1, []error{errors.New("No such image: ")}, nil), }, { Description: "before=non-exists-image", Require: nerdtest.NerdctlNeedsFixing("https://github.com/containerd/nerdctl/issues/3511"), Command: test.Command("images", "--filter", "before=non-exists-image"), - Expected: test.Expects(-1, nil, nil), + Expected: test.Expects(-1, []error{errors.New("No such image: ")}, nil), }, }, } diff --git a/pkg/imgutil/filtering.go b/pkg/imgutil/filtering.go index 97685c07106..fb76980eca1 100644 --- a/pkg/imgutil/filtering.go +++ b/pkg/imgutil/filtering.go @@ -143,18 +143,28 @@ func FilterByCreatedAt(ctx context.Context, client *containerd.Client, before [] maxTime = time.Now() ) + fetchImageNames := func(names []string) string { + parsedNames := make([]string, 0, len(names)) + for _, name := range names { + parsedNames = append(parsedNames, strings.TrimPrefix(name, "name==")) + } + return strings.Join(parsedNames, ",") + } + imageStore := client.ImageService() if len(before) > 0 { beforeImages, err := imageStore.List(ctx, before...) if err != nil { return []images.Image{}, err } - if len(beforeImages) > 0 { - maxTime = beforeImages[0].CreatedAt - for _, image := range beforeImages { - if image.CreatedAt.After(maxTime) { - maxTime = image.CreatedAt - } + if len(beforeImages) == 0 { + //nolint:stylecheck + return []images.Image{}, fmt.Errorf("No such image: %s", fetchImageNames(before)) + } + maxTime = beforeImages[0].CreatedAt + for _, image := range beforeImages { + if image.CreatedAt.After(maxTime) { + maxTime = image.CreatedAt } } } @@ -164,12 +174,14 @@ func FilterByCreatedAt(ctx context.Context, client *containerd.Client, before [] if err != nil { return []images.Image{}, err } - if len(sinceImages) > 0 { - minTime = sinceImages[0].CreatedAt - for _, image := range sinceImages { - if image.CreatedAt.Before(minTime) { - minTime = image.CreatedAt - } + if len(sinceImages) == 0 { + //nolint:stylecheck + return []images.Image{}, fmt.Errorf("No such image: %s", fetchImageNames(since)) + } + minTime = sinceImages[0].CreatedAt + for _, image := range sinceImages { + if image.CreatedAt.Before(minTime) { + minTime = image.CreatedAt } } }