diff --git a/client/diskusage.go b/client/diskusage.go index 0560b0eb2..f67cadc8c 100644 --- a/client/diskusage.go +++ b/client/diskusage.go @@ -25,7 +25,7 @@ type UsageInfo struct { func (c *Client) DiskUsage(ctx context.Context, opts ...DiskUsageOption) ([]*UsageInfo, error) { info := &DiskUsageInfo{} for _, o := range opts { - o(info) + o.SetDiskUsageOption(info) } req := &controlapi.DiskUsageRequest{Filter: info.Filter} @@ -60,14 +60,10 @@ func (c *Client) DiskUsage(ctx context.Context, opts ...DiskUsageOption) ([]*Usa return du, nil } -type DiskUsageOption func(*DiskUsageInfo) +type DiskUsageOption interface { + SetDiskUsageOption(*DiskUsageInfo) +} type DiskUsageInfo struct { Filter []string } - -func WithFilter(f []string) DiskUsageOption { - return func(di *DiskUsageInfo) { - di.Filter = f - } -} diff --git a/client/filter.go b/client/filter.go new file mode 100644 index 000000000..b05fe59d0 --- /dev/null +++ b/client/filter.go @@ -0,0 +1,19 @@ +package client + +func WithFilter(f []string) Filter { + return Filter(f) +} + +type Filter []string + +func (f Filter) SetDiskUsageOption(di *DiskUsageInfo) { + di.Filter = f +} + +func (f Filter) SetPruneOption(pi *PruneInfo) { + pi.Filter = f +} + +func (f Filter) SetListWorkersOption(lwi *ListWorkersInfo) { + lwi.Filter = f +} diff --git a/client/prune.go b/client/prune.go index b3c1edcd2..a5e581a3b 100644 --- a/client/prune.go +++ b/client/prune.go @@ -11,10 +11,10 @@ import ( func (c *Client) Prune(ctx context.Context, ch chan UsageInfo, opts ...PruneOption) error { info := &PruneInfo{} for _, o := range opts { - o(info) + o.SetPruneOption(info) } - req := &controlapi.PruneRequest{} + req := &controlapi.PruneRequest{Filter: info.Filter} cl, err := c.controlClient().Prune(ctx, req) if err != nil { return errors.Wrap(err, "failed to call prune") @@ -44,7 +44,10 @@ func (c *Client) Prune(ctx context.Context, ch chan UsageInfo, opts ...PruneOpti } } -type PruneOption func(*PruneInfo) +type PruneOption interface { + SetPruneOption(*PruneInfo) +} type PruneInfo struct { + Filter []string } diff --git a/client/workers.go b/client/workers.go index e70dcbc60..a86829255 100644 --- a/client/workers.go +++ b/client/workers.go @@ -18,7 +18,7 @@ type WorkerInfo struct { func (c *Client) ListWorkers(ctx context.Context, opts ...ListWorkersOption) ([]*WorkerInfo, error) { info := &ListWorkersInfo{} for _, o := range opts { - o(info) + o.SetListWorkersOption(info) } req := &controlapi.ListWorkersRequest{Filter: info.Filter} @@ -40,14 +40,10 @@ func (c *Client) ListWorkers(ctx context.Context, opts ...ListWorkersOption) ([] return wi, nil } -type ListWorkersOption func(*ListWorkersInfo) +type ListWorkersOption interface { + SetListWorkersOption(*ListWorkersInfo) +} type ListWorkersInfo struct { Filter []string } - -func WithWorkerFilter(f []string) ListWorkersOption { - return func(wi *ListWorkersInfo) { - wi.Filter = f - } -} diff --git a/cmd/buildctl/debug/workers.go b/cmd/buildctl/debug/workers.go index e6cf97df8..11f85533d 100644 --- a/cmd/buildctl/debug/workers.go +++ b/cmd/buildctl/debug/workers.go @@ -40,7 +40,7 @@ func listWorkers(clicontext *cli.Context) error { return err } - workers, err := c.ListWorkers(commandContext(clicontext), client.WithWorkerFilter(clicontext.StringSlice("filter"))) + workers, err := c.ListWorkers(commandContext(clicontext), client.WithFilter(clicontext.StringSlice("filter"))) if err != nil { return err } diff --git a/cmd/buildctl/prune.go b/cmd/buildctl/prune.go index 3dda41b66..c0ec4b5e5 100644 --- a/cmd/buildctl/prune.go +++ b/cmd/buildctl/prune.go @@ -15,6 +15,10 @@ var pruneCommand = cli.Command{ Usage: "clean up build cache", Action: prune, Flags: []cli.Flag{ + cli.StringSliceFlag{ + Name: "filter, f", + Usage: "Filter records", + }, cli.BoolFlag{ Name: "verbose, v", Usage: "Verbose output", @@ -52,7 +56,7 @@ func prune(clicontext *cli.Context) error { } }() - err = c.Prune(commandContext(clicontext), ch) + err = c.Prune(commandContext(clicontext), ch, client.WithFilter(clicontext.StringSlice("filter"))) close(ch) <-printed if err != nil {