package diff import ( "github.com/containerd/containerd/mount" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "golang.org/x/net/context" ) // Config is used to hold parameters needed for a diff operation type Config struct { // MediaType is the type of diff to generate // Default depends on the differ, // i.e. application/vnd.oci.image.layer.v1.tar+gzip MediaType string // Reference is the content upload reference // Default will use a random reference string Reference string // Labels are the labels to apply to the generated content Labels map[string]string } // Opt is used to configure a diff operation type Opt func(*Config) error // Differ allows the apply and creation of filesystem diffs between mounts type Differ interface { // Apply applies the content referred to by the given descriptor to // the provided mount. The method of applying is based on the // implementation and content descriptor. For example, in the common // case the descriptor is a file system difference in tar format, // that tar would be applied on top of the mounts. Apply(ctx context.Context, desc ocispec.Descriptor, mount []mount.Mount) (ocispec.Descriptor, error) // DiffMounts computes the difference between two mounts and returns a // descriptor for the computed diff. The options can provide // a ref which can be used to track the content creation of the diff. // The media type which is used to determine the format of the created // content can also be provided as an option. DiffMounts(ctx context.Context, lower, upper []mount.Mount, opts ...Opt) (ocispec.Descriptor, error) } // WithMediaType sets the media type to use for creating the diff, without // specifying the differ will choose a default. func WithMediaType(m string) Opt { return func(c *Config) error { c.MediaType = m return nil } } // WithReference is used to set the content upload reference used by // the diff operation. This allows the caller to track the upload through // the content store. func WithReference(ref string) Opt { return func(c *Config) error { c.Reference = ref return nil } } // WithLabels is used to set content labels on the created diff content. func WithLabels(labels map[string]string) Opt { return func(c *Config) error { c.Labels = labels return nil } }