Skip to content

Commit 99f3b5b

Browse files
committed
Fix duplicate results in podman images <image>
Fixes: #25725 Fixes: https://issues.redhat.com/browse/RUN-2726 Signed-off-by: Jan Rodák <[email protected]>
1 parent 0a0d05b commit 99f3b5b

File tree

2 files changed

+46
-4
lines changed

2 files changed

+46
-4
lines changed

cmd/podman/images/list.go

+34-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"os"
8+
"regexp"
89
"slices"
910
"strings"
1011
"time"
@@ -128,10 +129,27 @@ func images(cmd *cobra.Command, args []string) error {
128129
return err
129130
}
130131

131-
imgs, err := sortImages(summaries)
132+
reference := ""
133+
for _, filter := range listOptions.Filter {
134+
if strings.HasPrefix(filter, "reference=") {
135+
reference = strings.TrimPrefix(filter, "reference=")
136+
if strings.HasPrefix(reference, "sha256:") {
137+
reference = ""
138+
break
139+
}
140+
reference, _, _ = tokenRepoTag(reference)
141+
if strings.Contains(reference, "<none>") {
142+
reference = ""
143+
}
144+
break
145+
}
146+
}
147+
148+
imgs, err := sortImages(summaries, reference)
132149
if err != nil {
133150
return err
134151
}
152+
135153
switch {
136154
case report.IsJSON(listFlag.format):
137155
return writeJSON(imgs)
@@ -214,9 +232,16 @@ func writeTemplate(cmd *cobra.Command, imgs []imageReporter) error {
214232
return rpt.Execute(imgs)
215233
}
216234

217-
func sortImages(imageS []*entities.ImageSummary) ([]imageReporter, error) {
218-
imgs := make([]imageReporter, 0, len(imageS))
235+
func sortImages(imageS []*entities.ImageSummary, reference string) ([]imageReporter, error) {
219236
var err error
237+
var referenceRegex *regexp.Regexp
238+
if reference != "" {
239+
referenceRegex, err = regexp.Compile(reference + "$")
240+
if err != nil {
241+
return nil, err
242+
}
243+
}
244+
imgs := make([]imageReporter, 0, len(imageS))
220245
for _, e := range imageS {
221246
var h imageReporter
222247
if len(e.RepoTags) > 0 {
@@ -237,7 +262,12 @@ func sortImages(imageS []*entities.ImageSummary) ([]imageReporter, error) {
237262
// Note: we only want to display "<none>" if we
238263
// couldn't find any tagged name in RepoTags.
239264
if len(tagged) > 0 {
240-
imgs = append(imgs, tagged...)
265+
for _, i := range tagged {
266+
if reference != "" && !referenceRegex.MatchString(i.Repository) {
267+
continue
268+
}
269+
imgs = append(imgs, i)
270+
}
241271
} else {
242272
imgs = append(imgs, untagged[0])
243273
}

test/e2e/images_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -547,4 +547,16 @@ LABEL xyz="bar"
547547
Expect(session.OutputToString()).To(ContainSubstring("test-abc-xyz"))
548548
})
549549

550+
It("podman images <image> show duplicate images", func() {
551+
containerFile := "FROM quay.io/libpod/alpine:latest"
552+
imageName := "exampletestimage"
553+
podmanTest.BuildImage(containerFile, imageName, "false")
554+
555+
result := podmanTest.PodmanExitCleanly("images", imageName)
556+
557+
Expect(result.OutputToStringArray()).To(HaveLen(2))
558+
Expect(result.OutputToString()).To(ContainSubstring(imageName))
559+
Expect(result.OutputToString()).ToNot(ContainSubstring("alpine"))
560+
})
561+
550562
})

0 commit comments

Comments
 (0)