Uniform volume prune output msg with other prune commands

- Return error when user refuses at confirmation prompt
- Avoid sending space freed msg if user cancelled
- Fixed unit tests

Signed-off-by: Christopher Petito <chrisjpetito@gmail.com>
This commit is contained in:
Christopher Petito 2024-02-06 14:04:53 +00:00
parent ce3b07c0db
commit 69e0f53a03
3 changed files with 18 additions and 8 deletions

View File

@ -32,6 +32,10 @@ func NewPruneCommand(dockerCli command.Cli) *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
spaceReclaimed, output, err := runPrune(cmd.Context(), dockerCli, options) spaceReclaimed, output, err := runPrune(cmd.Context(), dockerCli, options)
if err != nil { if err != nil {
if errdefs.IsCancelled(err) {
fmt.Fprintln(dockerCli.Out(), output)
return nil
}
return err return err
} }
if output != "" { if output != "" {
@ -77,7 +81,7 @@ func runPrune(ctx context.Context, dockerCli command.Cli, options pruneOptions)
warning = allVolumesWarning warning = allVolumesWarning
} }
if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) { if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) {
return 0, "", nil return 0, "", errdefs.Cancelled(errors.New("user cancelled operation"))
} }
report, err := dockerCli.Client().VolumesPrune(ctx, pruneFilters) report, err := dockerCli.Client().VolumesPrune(ctx, pruneFilters)

View File

@ -73,13 +73,15 @@ func TestVolumePruneSuccess(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
args []string args []string
input string
volumePruneFunc func(args filters.Args) (types.VolumesPruneReport, error) volumePruneFunc func(args filters.Args) (types.VolumesPruneReport, error)
}{ }{
{ {
name: "all", name: "all",
args: []string{"--all"}, args: []string{"--all"},
input: "y",
volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) { volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) {
assert.Check(t, is.Equal([]string{"true"}, pruneFilter.Get("all"))) assert.Check(t, is.DeepEqual([]string{"true"}, pruneFilter.Get("all")))
return types.VolumesPruneReport{}, nil return types.VolumesPruneReport{}, nil
}, },
}, },
@ -91,10 +93,11 @@ func TestVolumePruneSuccess(t *testing.T) {
}, },
}, },
{ {
name: "label-filter", name: "label-filter",
args: []string{"--filter", "label=foobar"}, args: []string{"--filter", "label=foobar"},
input: "y",
volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) { volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) {
assert.Check(t, is.Equal([]string{"foobar"}, pruneFilter.Get("label"))) assert.Check(t, is.DeepEqual([]string{"foobar"}, pruneFilter.Get("label")))
return types.VolumesPruneReport{}, nil return types.VolumesPruneReport{}, nil
}, },
}, },
@ -104,6 +107,9 @@ func TestVolumePruneSuccess(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cli := test.NewFakeCli(&fakeClient{volumePruneFunc: tc.volumePruneFunc}) cli := test.NewFakeCli(&fakeClient{volumePruneFunc: tc.volumePruneFunc})
cmd := NewPruneCommand(cli) cmd := NewPruneCommand(cli)
if tc.input != "" {
cli.SetIn(streams.NewIn(io.NopCloser(strings.NewReader(tc.input))))
}
cmd.SetOut(io.Discard) cmd.SetOut(io.Discard)
cmd.SetArgs(tc.args) cmd.SetArgs(tc.args)
err := cmd.Execute() err := cmd.Execute()

View File

@ -1,2 +1,2 @@
WARNING! This will remove anonymous local volumes not used by at least one container. WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] Total reclaimed space: 0B Are you sure you want to continue? [y/N]