diff --git a/cli/command/service/ps.go b/cli/command/service/ps.go index 0220f7e041..d130404710 100644 --- a/cli/command/service/ps.go +++ b/cli/command/service/ps.go @@ -140,7 +140,7 @@ loop: } func updateNodeFilter(ctx context.Context, client client.APIClient, filter filters.Args) error { - if filter.Include("node") { + if filter.Contains("node") { nodeFilters := filter.Get("node") for _, nodeFilter := range nodeFilters { nodeReference, err := node.Reference(ctx, client, nodeFilter) diff --git a/cli/command/system/prune.go b/cli/command/system/prune.go index d036917015..dcc7b68d44 100644 --- a/cli/command/system/prune.go +++ b/cli/command/system/prune.go @@ -68,7 +68,7 @@ func runBuildCachePrune(dockerCli command.Cli, _ opts.FilterOpt) (uint64, string func runPrune(dockerCli command.Cli, options pruneOptions) error { // TODO version this once "until" filter is supported for volumes - if options.pruneVolumes && options.filter.Value().Include("until") { + if options.pruneVolumes && options.filter.Value().Contains("until") { return fmt.Errorf(`ERROR: The "until" filter is not supported with "--volumes"`) } if versions.LessThan(dockerCli.Client().ClientVersion(), "1.31") { diff --git a/cli/command/utils.go b/cli/command/utils.go index dc543e7dcf..13954c0101 100644 --- a/cli/command/utils.go +++ b/cli/command/utils.go @@ -102,14 +102,14 @@ func PruneFilters(dockerCli Cli, pruneFilters filters.Args) filters.Args { // CLI label filter supersede config.json. // If CLI label filter conflict with config.json, // skip adding label! filter in config.json. - if pruneFilters.Include("label!") && pruneFilters.ExactMatch("label!", parts[1]) { + if pruneFilters.Contains("label!") && pruneFilters.ExactMatch("label!", parts[1]) { continue } } else if parts[0] == "label!" { // CLI label! filter supersede config.json. // If CLI label! filter conflict with config.json, // skip adding label filter in config.json. - if pruneFilters.Include("label") && pruneFilters.ExactMatch("label", parts[1]) { + if pruneFilters.Contains("label") && pruneFilters.ExactMatch("label", parts[1]) { continue } } diff --git a/opts/opts.go b/opts/opts.go index 51519e03bc..a246a4b259 100644 --- a/opts/opts.go +++ b/opts/opts.go @@ -11,6 +11,7 @@ import ( "github.com/docker/docker/api/types/filters" units "github.com/docker/go-units" + "github.com/pkg/errors" ) var ( @@ -318,7 +319,7 @@ func NewFilterOpt() FilterOpt { } func (o *FilterOpt) String() string { - repr, err := filters.ToParam(o.filter) + repr, err := filters.ToJSON(o.filter) if err != nil { return "invalid filters" } @@ -327,9 +328,18 @@ func (o *FilterOpt) String() string { // Set sets the value of the opt by parsing the command line value func (o *FilterOpt) Set(value string) error { - var err error - o.filter, err = filters.ParseFlag(value, o.filter) - return err + if value == "" { + return nil + } + if !strings.Contains(value, "=") { + return errors.New("bad format of filter (expected name=value)") + } + f := strings.SplitN(value, "=", 2) + name := strings.ToLower(strings.TrimSpace(f[0])) + value = strings.TrimSpace(f[1]) + + o.filter.Add(name, value) + return nil } // Type returns the option type