diff --git a/pkg/domain/infra/tunnel/images.go b/pkg/domain/infra/tunnel/images.go index 49e9eca0ca..bd7355c01c 100644 --- a/pkg/domain/infra/tunnel/images.go +++ b/pkg/domain/infra/tunnel/images.go @@ -101,8 +101,12 @@ func (ir *ImageEngine) History(_ context.Context, nameOrID string, _ entities.Im func (ir *ImageEngine) Prune(_ context.Context, opts entities.ImagePruneOptions) ([]*reports.PruneReport, error) { filters := make(map[string][]string, len(opts.Filter)) for _, filter := range opts.Filter { - f := strings.Split(filter, "=") - filters[f[0]] = f[1:] + f := strings.SplitN(filter, "=", 2) + if len(f) > 1 { + filters[f[0]] = append(filters[f[0]], f[1]) + } else { + filters[f[0]] = append(filters[f[0]], "") + } } options := new(images.PruneOptions).WithAll(opts.All).WithFilters(filters).WithExternal(opts.External).WithBuildCache(opts.BuildCache) reports, err := images.Prune(ir.ClientCtx, options) diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go index 1be2052a10..0eaade981d 100644 --- a/test/e2e/images_test.go +++ b/test/e2e/images_test.go @@ -494,6 +494,31 @@ RUN > file2 Expect(result.OutputToStringArray()).To(BeEmpty()) }) + It("podman image prune --filter label=key=value", func() { + dockerfile := `FROM quay.io/libpod/alpine:latest +RUN > file +` + dockerfile2 := `FROM quay.io/libpod/alpine:latest +RUN > file2 +` + podmanTest.BuildImageWithLabel(dockerfile, "foobar.com/workdir:latest", "false", "version=1.0") + podmanTest.BuildImageWithLabel(dockerfile2, "foobar.com/workdir:latest", "false", "version=2.0") + + result := podmanTest.Podman([]string{"image", "prune", "--filter", "label=version=1.0", "--force"}) + result.WaitWithDefaultTimeout() + Expect(result).Should(ExitCleanly()) + Expect(result.OutputToStringArray()).To(HaveLen(1)) + + // only version=1.0 should be gone; version=2.0 must survive + result = podmanTest.Podman([]string{"image", "list", "--filter", "label=version=1.0"}) + Expect(result.OutputToStringArray()).To(BeEmpty()) + + result = podmanTest.Podman([]string{"image", "list", "--filter", "label=version=2.0", "-q"}) + result.WaitWithDefaultTimeout() + Expect(result).Should(ExitCleanly()) + Expect(result.OutputToStringArray()).To(HaveLen(1)) + }) + It("podman builder prune", func() { dockerfile := `FROM quay.io/libpod/alpine:latest RUN > file