layer/empty.go
500e77ba
 package layer
 
 import (
 	"archive/tar"
 	"bytes"
362369b4
 	"fmt"
500e77ba
 	"io"
21278efa
 	"io/ioutil"
500e77ba
 )
 
 // 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{}
 
21278efa
 func (el *emptyLayer) TarStream() (io.ReadCloser, error) {
500e77ba
 	buf := new(bytes.Buffer)
 	tarWriter := tar.NewWriter(buf)
 	tarWriter.Close()
21278efa
 	return ioutil.NopCloser(buf), nil
500e77ba
 }
 
6622cc97
 func (el *emptyLayer) TarStreamFrom(p ChainID) (io.ReadCloser, error) {
 	if p == "" {
 		return el.TarStream()
 	}
362369b4
 	return nil, fmt.Errorf("can't get parent tar stream of an empty layer")
 }
 
500e77ba
 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() (size int64, err error) {
 	return 0, nil
 }
 
 func (el *emptyLayer) DiffSize() (size int64, err error) {
 	return 0, nil
 }
 
 func (el *emptyLayer) Metadata() (map[string]string, error) {
 	return make(map[string]string), nil
 }
bd5f92d2
 
 // IsEmpty returns true if the layer is an EmptyLayer
 func IsEmpty(diffID DiffID) bool {
 	return diffID == DigestSHA256EmptyTar
 }