5
5
"errors"
6
6
"fmt"
7
7
"os"
8
+ "regexp"
8
9
"slices"
9
10
"strings"
10
11
"time"
@@ -128,10 +129,30 @@ func images(cmd *cobra.Command, args []string) error {
128
129
return err
129
130
}
130
131
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 )
132
152
if err != nil {
133
153
return err
134
154
}
155
+
135
156
switch {
136
157
case report .IsJSON (listFlag .format ):
137
158
return writeJSON (imgs )
@@ -214,9 +235,16 @@ func writeTemplate(cmd *cobra.Command, imgs []imageReporter) error {
214
235
return rpt .Execute (imgs )
215
236
}
216
237
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 ) {
219
239
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 ))
220
248
for _ , e := range imageS {
221
249
var h imageReporter
222
250
if len (e .RepoTags ) > 0 {
@@ -237,7 +265,12 @@ func sortImages(imageS []*entities.ImageSummary) ([]imageReporter, error) {
237
265
// Note: we only want to display "<none>" if we
238
266
// couldn't find any tagged name in RepoTags.
239
267
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
+ }
241
274
} else {
242
275
imgs = append (imgs , untagged [0 ])
243
276
}
0 commit comments