Fix Image.applyFilters to do an AND logic
When multiple filters are given, only return objects that match all the filters given by the user. This matches Docker behavior. Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
This commit is contained in:
parent
8b8d63283f
commit
02cf8cceb4
|
|
@ -20,14 +20,11 @@ import (
|
||||||
// indicates that the image matches the criteria.
|
// indicates that the image matches the criteria.
|
||||||
type filterFunc func(*Image) (bool, error)
|
type filterFunc func(*Image) (bool, error)
|
||||||
|
|
||||||
// Apply the specified filters. At least one filter of each key must apply.
|
// Apply the specified filters. All filters of each key must apply.
|
||||||
func (i *Image) applyFilters(ctx context.Context, filters map[string][]filterFunc) (bool, error) {
|
func (i *Image) applyFilters(ctx context.Context, filters map[string][]filterFunc) (bool, error) {
|
||||||
matches := false
|
for key := range filters {
|
||||||
for key := range filters { // and
|
for _, filter := range filters[key] {
|
||||||
matches = false
|
matches, err := filter(i)
|
||||||
for _, filter := range filters[key] { // or
|
|
||||||
var err error
|
|
||||||
matches, err = filter(i)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Some images may have been corrupted in the
|
// Some images may have been corrupted in the
|
||||||
// meantime, so do an extra check and make the
|
// meantime, so do an extra check and make the
|
||||||
|
|
@ -38,15 +35,13 @@ func (i *Image) applyFilters(ctx context.Context, filters map[string][]filterFun
|
||||||
}
|
}
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if matches {
|
// If any filter within a group doesn't match, return false
|
||||||
break
|
if !matches {
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !matches {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return matches, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// filterImages returns a slice of images which are passing all specified
|
// filterImages returns a slice of images which are passing all specified
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue