dotcloud/docker

View on GitHub
layer/empty.go

Summary

Maintainability
A
0 mins
Test Coverage
package layer // import "github.com/docker/docker/layer"

import (
    "archive/tar"
    "bytes"
    "fmt"
    "io"
)

// DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file -
// (1024 NULL bytes)
const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef")

type emptyLayer struct{}

// EmptyLayer is a layer that corresponds to empty tar.
var EmptyLayer = &emptyLayer{}

func (el *emptyLayer) TarStream() (io.ReadCloser, error) {
    buf := new(bytes.Buffer)
    tarWriter := tar.NewWriter(buf)
    tarWriter.Close()
    return io.NopCloser(buf), nil
}

func (el *emptyLayer) TarStreamFrom(p ChainID) (io.ReadCloser, error) {
    if p == "" {
        return el.TarStream()
    }
    return nil, fmt.Errorf("can't get parent tar stream of an empty layer")
}

func (el *emptyLayer) ChainID() ChainID {
    return ChainID(DigestSHA256EmptyTar)
}

func (el *emptyLayer) DiffID() DiffID {
    return DigestSHA256EmptyTar
}

func (el *emptyLayer) Parent() Layer {
    return nil
}

func (el *emptyLayer) Size() int64 {
    return 0
}

func (el *emptyLayer) DiffSize() int64 {
    return 0
}

func (el *emptyLayer) Metadata() (map[string]string, error) {
    return make(map[string]string), nil
}

// IsEmpty returns true if the layer is an EmptyLayer
func IsEmpty(diffID DiffID) bool {
    return diffID == DigestSHA256EmptyTar
}