Merge pull request #47577 from vvoland/c8d-list-labels-filter

c8d/list: Don't setup label filter if it's not specified
This commit is contained in:
Paweł Gronowski 2024-03-18 15:13:40 +01:00 committed by GitHub
commit fe70ee9477
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -467,7 +467,7 @@ func (i *ImageService) setupFilters(ctx context.Context, imageFilters filters.Ar
return nil, err
}
labelFn, err := setupLabelFilter(i.content, imageFilters)
labelFn, err := setupLabelFilter(ctx, i.content, imageFilters)
if err != nil {
return nil, err
}
@ -517,7 +517,7 @@ func (i *ImageService) setupFilters(ctx context.Context, imageFilters filters.Ar
// setupLabelFilter parses filter args for "label" and "label!" and returns a
// filter func which will check if any image config from the given image has
// labels that match given predicates.
func setupLabelFilter(store content.Store, fltrs filters.Args) (func(image images.Image) bool, error) {
func setupLabelFilter(ctx context.Context, store content.Store, fltrs filters.Args) (func(image images.Image) bool, error) {
type labelCheck struct {
key string
value string
@ -551,19 +551,25 @@ func setupLabelFilter(store content.Store, fltrs filters.Args) (func(image image
}
}
return func(image images.Image) bool {
ctx := context.TODO()
if len(checks) == 0 {
return nil, nil
}
return func(image images.Image) bool {
// This is not an error, but a signal to Dispatch that it should stop
// processing more content (otherwise it will run for all children).
// It will be returned once a matching config is found.
errFoundConfig := errors.New("success, found matching config")
err := images.Dispatch(ctx, presentChildrenHandler(store, images.HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) (subdescs []ocispec.Descriptor, err error) {
if !images.IsConfigType(desc.MediaType) {
return nil, nil
}
var cfg configLabels
if err := readConfig(ctx, store, desc, &cfg); err != nil {
if errdefs.IsNotFound(err) {
return nil, nil
}
return nil, err
}