compat API: fix image-prune --all

Docker deals with the --all flag on the client side while Podman does it
on the server side.  Hence, make sure to not set the dangling filter
with two different values in the backend.

Fixes: #20469
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
This commit is contained in:
Valentin Rothberg
2023-10-25 10:58:00 +02:00
parent 242d223196
commit c13b8e3c9c
2 changed files with 14 additions and 1 deletions

View File

@ -56,7 +56,18 @@ func (ir *ImageEngine) Prune(ctx context.Context, opts entities.ImagePruneOption
}
if !opts.All {
pruneOptions.Filters = append(pruneOptions.Filters, "dangling=true")
// Issue #20469: Docker clients handle the --all flag on the
// client side by setting the dangling filter directly.
alreadySet := false
for _, filter := range pruneOptions.Filters {
if strings.HasPrefix(filter, "dangling=") {
alreadySet = true
break
}
}
if !alreadySet {
pruneOptions.Filters = append(pruneOptions.Filters, "dangling=true")
}
}
if opts.External {
pruneOptions.Filters = append(pruneOptions.Filters, "containers=external")

View File

@ -164,6 +164,8 @@ t DELETE libpod/images/test:test 200
t GET images/json?filters='{"label":["xyz"]}' 200 length=0
t GET libpod/images/json?filters='{"label":["xyz"]}' 200 length=0
# Must not error out: #20469
t POST images/prune?filters='{"dangling":["false"]}' 200
# to be used in prune until filter tests
podman image build -t test1:latest -<<EOF