podman images: add --filter=since=XX

Looks like a bit of a misunderstanding from early on.

Docker implements --filter=since=IMAGE. Podman implements 'after'
instead of 'since'. Add an equivalent case statement to handle
both, keeping 'after' because we have no way of knowing if it
is used in the field.

Update documentation ... and fix what looks like a complete
misinterpretation of what the code actually does: the man page
claimed that these were time fields, but I don't see any
possible incantation in which a time value works or could
work. Updated docs to reflect IMAGE usage. Also changed
nonworking '==' to single '='.

Added tests. [UPDATE: skip with broken podman-remote]

Fixes: #5040

Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
Ed Santiago
2020-02-19 13:30:12 -07:00
parent 126f75d7be
commit 29930fae70
3 changed files with 41 additions and 5 deletions

View File

@ -29,11 +29,11 @@ Filter output based on conditions provided
Filters: Filters:
**after==TIMESTRING** **since=IMAGE**
Filter on images created after the given time.Time. Filter on images created after the given IMAGE (name or tag).
**before==TIMESTRING** **before=IMAGE**
Filter on images created before the given time.Time. Filter on images created before the given IMAGE (name or tag).
**dangling=true|false** **dangling=true|false**
Show dangling images. Dangling images are a file system layer that was used in a previous build of an image and is no longer referenced by any active images. They are denoted with the <none> tag, consume disk space and serve no active purpose. Show dangling images. Dangling images are a file system layer that was used in a previous build of an image and is no longer referenced by any active images. They are denoted with the <none> tag, consume disk space and serve no active purpose.

View File

@ -141,7 +141,7 @@ func (ir *Runtime) createFilterFuncs(filters []string, img *Image) ([]ResultFilt
return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1]) return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1])
} }
filterFuncs = append(filterFuncs, CreatedBeforeFilter(before.Created())) filterFuncs = append(filterFuncs, CreatedBeforeFilter(before.Created()))
case "after": case "since", "after":
after, err := ir.NewFromLocal(splitFilter[1]) after, err := ir.NewFromLocal(splitFilter[1])
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1]) return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1])

View File

@ -74,4 +74,40 @@ size | [0-9]\\\+
run_podman rm my-container run_podman rm my-container
} }
@test "podman images - filter" {
skip_if_remote "podman commit -q is broken in podman-remote"
run_podman inspect --format '{{.ID}}' $IMAGE
iid=$output
run_podman images --noheading --filter=after=$iid
is "$output" "" "baseline: empty results from filter (after)"
run_podman images --noheading --filter=before=$iid
is "$output" "" "baseline: empty results from filter (before)"
# Create a dummy container, then commit that as an image. We will
# now be able to use before/after/since queries
run_podman run --name mytinycontainer $IMAGE true
run_podman commit -q mytinycontainer mynewimage
new_iid=$output
# (refactor common options for legibility)
opts='--noheading --no-trunc --format={{.ID}}--{{.Repository}}:{{.Tag}}'
run_podman images ${opts} --filter=after=$iid
is "$output" "sha256:$new_iid--localhost/mynewimage:latest" "filter: after"
# Same thing, with 'since' instead of 'after'
run_podman images ${opts} --filter=since=$iid
is "$output" "sha256:$new_iid--localhost/mynewimage:latest" "filter: since"
run_podman images ${opts} --filter=before=mynewimage
is "$output" "sha256:$iid--$IMAGE" "filter: before"
# Clean up
run_podman rmi mynewimage
run_podman rm mytinycontainer
}
# vim: filetype=sh # vim: filetype=sh