summaryrefslogtreecommitdiff
path: root/libpod/image/df.go
diff options
context:
space:
mode:
authorValentin Rothberg <rothberg@redhat.com>2021-04-22 08:01:12 +0200
committerValentin Rothberg <rothberg@redhat.com>2021-05-05 11:30:12 +0200
commit0f7d54b0260c1be992ee3b9cee359ef3a9e8bd21 (patch)
tree192e52054de2abf0c92d83ecdbc71d498c2ec947 /libpod/image/df.go
parent8eefca5a257121b177562742c972e39e1686140d (diff)
downloadpodman-0f7d54b0260c1be992ee3b9cee359ef3a9e8bd21.tar.gz
podman-0f7d54b0260c1be992ee3b9cee359ef3a9e8bd21.tar.bz2
podman-0f7d54b0260c1be992ee3b9cee359ef3a9e8bd21.zip
migrate Podman to containers/common/libimage
Migrate the Podman code base over to `common/libimage` which replaces `libpod/image` and a lot of glue code entirely. Note that I tried to leave bread crumbs for changed tests. Miscellaneous changes: * Some errors yield different messages which required to alter some tests. * I fixed some pre-existing issues in the code. Others were marked as `//TODO`s to prevent the PR from exploding. * The `NamesHistory` of an image is returned as is from the storage. Previously, we did some filtering which I think is undesirable. Instead we should return the data as stored in the storage. * Touched handlers use the ABI interfaces where possible. * Local image resolution: previously Podman would match "foo" on "myfoo". This behaviour has been changed and Podman will now only match on repository boundaries such that "foo" would match "my/foo" but not "myfoo". I consider the old behaviour to be a bug, at the very least an exotic corner case. * Futhermore, "foo:none" does *not* resolve to a local image "foo" without tag anymore. It's a hill I am (almost) willing to die on. * `image prune` prints the IDs of pruned images. Previously, in some cases, the names were printed instead. The API clearly states ID, so we should stick to it. * Compat endpoint image removal with _force_ deletes the entire not only the specified tag. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
Diffstat (limited to 'libpod/image/df.go')
-rw-r--r--libpod/image/df.go126
1 files changed, 0 insertions, 126 deletions
diff --git a/libpod/image/df.go b/libpod/image/df.go
deleted file mode 100644
index 231d28df4..000000000
--- a/libpod/image/df.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package image
-
-import (
- "context"
- "time"
-
- "github.com/containers/image/v5/docker/reference"
-)
-
-// DiskUsageStat gives disk-usage statistics for a specific image.
-type DiskUsageStat struct {
- // ID of the image.
- ID string
- // Repository of the first recorded name of the image.
- Repository string
- // Tag of the first recorded name of the image.
- Tag string
- // Created is the creation time of the image.
- Created time.Time
- // SharedSize is the amount of space shared with another image.
- SharedSize uint64
- // UniqueSize is the amount of space used only by this image.
- UniqueSize uint64
- // Size is the total size of the image (i.e., the sum of the shared and
- // unique size).
- Size uint64
- // Number of containers using the image.
- Containers int
-}
-
-// DiskUsage returns disk-usage statistics for the specified slice of images.
-func (ir *Runtime) DiskUsage(ctx context.Context, images []*Image) ([]DiskUsageStat, error) {
- stats := make([]DiskUsageStat, len(images))
-
- // Build a layerTree to quickly compute (and cache!) parent/child
- // relations.
- tree, err := ir.layerTree()
- if err != nil {
- return nil, err
- }
-
- // Calculate the stats for each image.
- for i, img := range images {
- stat, err := diskUsageForImage(ctx, img, tree)
- if err != nil {
- return nil, err
- }
- stats[i] = *stat
- }
-
- return stats, nil
-}
-
-// diskUsageForImage returns the disk-usage statistics for the specified image.
-func diskUsageForImage(ctx context.Context, image *Image, tree *layerTree) (*DiskUsageStat, error) {
- stat := DiskUsageStat{
- ID: image.ID(),
- Created: image.Created(),
- }
-
- // Repository and tag.
- var name, repository, tag string
- for _, n := range image.Names() {
- if len(n) > 0 {
- name = n
- break
- }
- }
- if len(name) > 0 {
- named, err := reference.ParseNormalizedNamed(name)
- if err != nil {
- return nil, err
- }
- repository = named.Name()
- if tagged, isTagged := named.(reference.NamedTagged); isTagged {
- tag = tagged.Tag()
- }
- } else {
- repository = "<none>"
- tag = "<none>"
- }
- stat.Repository = repository
- stat.Tag = tag
-
- // Shared, unique and total size.
- parent, err := tree.parent(ctx, image)
- if err != nil {
- return nil, err
- }
- childIDs, err := tree.children(ctx, image, false)
- if err != nil {
- return nil, err
- }
- // Optimistically set unique size to the full size of the image.
- size, err := image.Size(ctx)
- if err != nil {
- return nil, err
- }
- stat.UniqueSize = *size
-
- if len(childIDs) > 0 {
- // If we have children, we share everything.
- stat.SharedSize = stat.UniqueSize
- stat.UniqueSize = 0
- } else if parent != nil {
- // If we have no children but a parent, remove the parent
- // (shared) size from the unique one.
- size, err := parent.Size(ctx)
- if err != nil {
- return nil, err
- }
- stat.UniqueSize -= *size
- stat.SharedSize = *size
- }
-
- stat.Size = stat.SharedSize + stat.UniqueSize
-
- // Number of containers using the image.
- containers, err := image.Containers()
- if err != nil {
- return nil, err
- }
- stat.Containers = len(containers)
-
- return &stat, nil
-}