Skip to content

Commit

Permalink
[fix] fix image filter with nonexist image
Browse files Browse the repository at this point in the history
Signed-off-by: xyz-li <[email protected]>
  • Loading branch information
xyz-li committed Oct 17, 2024
1 parent 62a8286 commit 27a1816
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
5 changes: 3 additions & 2 deletions cmd/nerdctl/image/image_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package image

import (
"errors"
"fmt"
"slices"
"strings"
Expand Down Expand Up @@ -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),
},
},
}
Expand Down
36 changes: 24 additions & 12 deletions pkg/imgutil/filtering.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,18 +145,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
}
}
}
Expand All @@ -166,12 +176,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
}
}
}
Expand Down

0 comments on commit 27a1816

Please sign in to comment.