From 4f252be4a00c447b82b3d8e69c5ab060bd8277be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brauner?= Date: Wed, 8 Apr 2026 13:14:30 +0200 Subject: [PATCH] Fix inconsistencies between --all and --filter=all in volume prune MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brauner --- cmd/podman/volumes/prune.go | 7 +++++++ test/e2e/volume_prune_test.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/cmd/podman/volumes/prune.go b/cmd/podman/volumes/prune.go index 0a6b4ae0c5..4aa21ed891 100644 --- a/cmd/podman/volumes/prune.go +++ b/cmd/podman/volumes/prune.go @@ -3,6 +3,7 @@ package volumes import ( "bufio" "context" + "errors" "fmt" "os" "strings" @@ -64,6 +65,11 @@ func prune(cmd *cobra.Command, _ []string) error { // --all adds filter all=true (Docker-compatible; behavior is filter-only) allFlag, _ := cmd.Flags().GetBool("all") + filterAllFlag := strings.EqualFold(pruneOptions.Filters.Get("all"), "true") + if allFlag && filterAllFlag { + return errors.New("--all and --filter all cannot be used together") + } + allFlag = allFlag || filterAllFlag if allFlag { pruneOptions.Filters.Set("all", "true") } @@ -79,6 +85,7 @@ func prune(cmd *cobra.Command, _ []string) error { if err != nil { return err } + delete(listOptions.Filter, "all") // list does not support --filter all filteredVolumes, err := registry.ContainerEngine().VolumeList(context.Background(), listOptions) if err != nil { return err diff --git a/test/e2e/volume_prune_test.go b/test/e2e/volume_prune_test.go index 7fc1cc4eea..3bfcde56e7 100644 --- a/test/e2e/volume_prune_test.go +++ b/test/e2e/volume_prune_test.go @@ -42,6 +42,14 @@ var _ = Describe("Podman volume prune", func() { Expect(session.OutputToString()).To(ContainSubstring("named_vol")) }) + It("podman volume prune --all removes all unused volumes", func() { + podmanTest.PodmanExitCleanly("volume", "create", "prune_all_test") + podmanTest.PodmanExitCleanly("volume", "prune", "--all", "--force") + + session := podmanTest.PodmanExitCleanly("volume", "ls") + Expect(session.OutputToStringArray()).To(HaveLen(1)) + }) + It("podman volume prune --filter all=true removes all unused volumes", func() { podmanTest.PodmanExitCleanly("volume", "create", "prune_filter_all_test") podmanTest.PodmanExitCleanly("volume", "prune", "--filter", "all=true", "--force") @@ -50,6 +58,10 @@ var _ = Describe("Podman volume prune", func() { Expect(session.OutputToStringArray()).To(HaveLen(1)) }) + It("podman volume prune --filter all=true does not crash without --force", func() { + podmanTest.PodmanExitCleanly("volume", "prune", "--filter", "all=true") + }) + It("podman prune volume --filter until", func() { podmanTest.PodmanExitCleanly("volume", "create", "--label", "label1=value1", "myvol1")