Skip to content

Commit 27a1816

Browse files
committed
[fix] fix image filter with nonexist image
Signed-off-by: xyz-li <[email protected]>
1 parent 62a8286 commit 27a1816

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

cmd/nerdctl/image/image_list_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package image
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"slices"
2223
"strings"
@@ -258,13 +259,13 @@ RUN echo "actually creating a layer so that docker sets the createdAt time"
258259
Description: "since=non-exists-image",
259260
Require: nerdtest.NerdctlNeedsFixing("https://github.com/containerd/nerdctl/issues/3511"),
260261
Command: test.Command("images", "--filter", "since=non-exists-image"),
261-
Expected: test.Expects(-1, nil, nil),
262+
Expected: test.Expects(-1, []error{errors.New("No such image: ")}, nil),
262263
},
263264
{
264265
Description: "before=non-exists-image",
265266
Require: nerdtest.NerdctlNeedsFixing("https://github.com/containerd/nerdctl/issues/3511"),
266267
Command: test.Command("images", "--filter", "before=non-exists-image"),
267-
Expected: test.Expects(-1, nil, nil),
268+
Expected: test.Expects(-1, []error{errors.New("No such image: ")}, nil),
268269
},
269270
},
270271
}

pkg/imgutil/filtering.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,28 @@ func FilterByCreatedAt(ctx context.Context, client *containerd.Client, before []
145145
maxTime = time.Now()
146146
)
147147

148+
fetchImageNames := func(names []string) string {
149+
parsedNames := make([]string, 0, len(names))
150+
for _, name := range names {
151+
parsedNames = append(parsedNames, strings.TrimPrefix(name, "name=="))
152+
}
153+
return strings.Join(parsedNames, ",")
154+
}
155+
148156
imageStore := client.ImageService()
149157
if len(before) > 0 {
150158
beforeImages, err := imageStore.List(ctx, before...)
151159
if err != nil {
152160
return []images.Image{}, err
153161
}
154-
if len(beforeImages) > 0 {
155-
maxTime = beforeImages[0].CreatedAt
156-
for _, image := range beforeImages {
157-
if image.CreatedAt.After(maxTime) {
158-
maxTime = image.CreatedAt
159-
}
162+
if len(beforeImages) == 0 {
163+
//nolint:stylecheck
164+
return []images.Image{}, fmt.Errorf("No such image: %s", fetchImageNames(before))
165+
}
166+
maxTime = beforeImages[0].CreatedAt
167+
for _, image := range beforeImages {
168+
if image.CreatedAt.After(maxTime) {
169+
maxTime = image.CreatedAt
160170
}
161171
}
162172
}
@@ -166,12 +176,14 @@ func FilterByCreatedAt(ctx context.Context, client *containerd.Client, before []
166176
if err != nil {
167177
return []images.Image{}, err
168178
}
169-
if len(sinceImages) > 0 {
170-
minTime = sinceImages[0].CreatedAt
171-
for _, image := range sinceImages {
172-
if image.CreatedAt.Before(minTime) {
173-
minTime = image.CreatedAt
174-
}
179+
if len(sinceImages) == 0 {
180+
//nolint:stylecheck
181+
return []images.Image{}, fmt.Errorf("No such image: %s", fetchImageNames(since))
182+
}
183+
minTime = sinceImages[0].CreatedAt
184+
for _, image := range sinceImages {
185+
if image.CreatedAt.Before(minTime) {
186+
minTime = image.CreatedAt
175187
}
176188
}
177189
}

0 commit comments

Comments
 (0)