dotcloud/docker

View on GitHub
daemon/containerd/image_changes.go

Summary

Maintainability
A
0 mins
Test Coverage
package containerd

import (
    "context"

    "github.com/containerd/containerd/mount"
    "github.com/containerd/log"
    "github.com/docker/docker/container"
    "github.com/docker/docker/pkg/archive"
    "github.com/docker/docker/pkg/stringid"
)

func (i *ImageService) Changes(ctx context.Context, container *container.Container) ([]archive.Change, error) {
    snapshotter := i.client.SnapshotService(container.Driver)
    info, err := snapshotter.Stat(ctx, container.ID)
    if err != nil {
        return nil, err
    }

    id := stringid.GenerateRandomID()
    parentViewKey := container.ID + "-parent-view-" + id
    imageMounts, _ := snapshotter.View(ctx, parentViewKey, info.Parent)

    defer func() {
        if err := snapshotter.Remove(ctx, parentViewKey); err != nil {
            log.G(ctx).WithError(err).Warn("error removing the parent view snapshot")
        }
    }()

    var changes []archive.Change
    err = i.PerformWithBaseFS(ctx, container, func(containerRoot string) error {
        return mount.WithReadonlyTempMount(ctx, imageMounts, func(imageRoot string) error {
            changes, err = archive.ChangesDirs(containerRoot, imageRoot)
            return err
        })
    })

    return changes, err
}