Skip to content

Commit 088367b

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 088367b

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

cmd/podman/images/list.go

+37-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,30 @@ 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, _, err = tokenRepoTag(reference)
141+
if err != nil {
142+
return err
143+
}
144+
if strings.Contains(reference, "<none>") {
145+
reference = ""
146+
}
147+
break
148+
}
149+
}
150+
151+
imgs, err := sortImages(summaries, reference)
132152
if err != nil {
133153
return err
134154
}
155+
135156
switch {
136157
case report.IsJSON(listFlag.format):
137158
return writeJSON(imgs)
@@ -214,9 +235,16 @@ func writeTemplate(cmd *cobra.Command, imgs []imageReporter) error {
214235
return rpt.Execute(imgs)
215236
}
216237

217-
func sortImages(imageS []*entities.ImageSummary) ([]imageReporter, error) {
218-
imgs := make([]imageReporter, 0, len(imageS))
238+
func sortImages(imageS []*entities.ImageSummary, reference string) ([]imageReporter, error) {
219239
var err error
240+
var referenceRegex *regexp.Regexp
241+
if reference != "" {
242+
referenceRegex, err = regexp.Compile(reference + "$")
243+
if err != nil {
244+
return nil, err
245+
}
246+
}
247+
imgs := make([]imageReporter, 0, len(imageS))
220248
for _, e := range imageS {
221249
var h imageReporter
222250
if len(e.RepoTags) > 0 {
@@ -237,7 +265,12 @@ func sortImages(imageS []*entities.ImageSummary) ([]imageReporter, error) {
237265
// Note: we only want to display "<none>" if we
238266
// couldn't find any tagged name in RepoTags.
239267
if len(tagged) > 0 {
240-
imgs = append(imgs, tagged...)
268+
for _, i := range tagged {
269+
if reference != "" && !referenceRegex.MatchString(i.Repository) {
270+
continue
271+
}
272+
imgs = append(imgs, i)
273+
}
241274
} else {
242275
imgs = append(imgs, untagged[0])
243276
}

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)