Skip to content

Commit ef7fdba

Browse files
Merge pull request #28464 from simonbrauner/volume-prune-fix-all-filter
Fix inconsistencies between --all and --filter=all in volume prune
2 parents 80df8f2 + 4f252be commit ef7fdba

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

cmd/podman/volumes/prune.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package volumes
33
import (
44
"bufio"
55
"context"
6+
"errors"
67
"fmt"
78
"os"
89
"strings"
@@ -64,6 +65,11 @@ func prune(cmd *cobra.Command, _ []string) error {
6465

6566
// --all adds filter all=true (Docker-compatible; behavior is filter-only)
6667
allFlag, _ := cmd.Flags().GetBool("all")
68+
filterAllFlag := strings.EqualFold(pruneOptions.Filters.Get("all"), "true")
69+
if allFlag && filterAllFlag {
70+
return errors.New("--all and --filter all cannot be used together")
71+
}
72+
allFlag = allFlag || filterAllFlag
6773
if allFlag {
6874
pruneOptions.Filters.Set("all", "true")
6975
}
@@ -79,6 +85,7 @@ func prune(cmd *cobra.Command, _ []string) error {
7985
if err != nil {
8086
return err
8187
}
88+
delete(listOptions.Filter, "all") // list does not support --filter all
8289
filteredVolumes, err := registry.ContainerEngine().VolumeList(context.Background(), listOptions)
8390
if err != nil {
8491
return err

test/e2e/volume_prune_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ var _ = Describe("Podman volume prune", func() {
4242
Expect(session.OutputToString()).To(ContainSubstring("named_vol"))
4343
})
4444

45+
It("podman volume prune --all removes all unused volumes", func() {
46+
podmanTest.PodmanExitCleanly("volume", "create", "prune_all_test")
47+
podmanTest.PodmanExitCleanly("volume", "prune", "--all", "--force")
48+
49+
session := podmanTest.PodmanExitCleanly("volume", "ls")
50+
Expect(session.OutputToStringArray()).To(HaveLen(1))
51+
})
52+
4553
It("podman volume prune --filter all=true removes all unused volumes", func() {
4654
podmanTest.PodmanExitCleanly("volume", "create", "prune_filter_all_test")
4755
podmanTest.PodmanExitCleanly("volume", "prune", "--filter", "all=true", "--force")
@@ -50,6 +58,10 @@ var _ = Describe("Podman volume prune", func() {
5058
Expect(session.OutputToStringArray()).To(HaveLen(1))
5159
})
5260

61+
It("podman volume prune --filter all=true does not crash without --force", func() {
62+
podmanTest.PodmanExitCleanly("volume", "prune", "--filter", "all=true")
63+
})
64+
5365
It("podman prune volume --filter until", func() {
5466
podmanTest.PodmanExitCleanly("volume", "create", "--label", "label1=value1", "myvol1")
5567

0 commit comments

Comments
 (0)