gopkg.in/docker/docker.v20@v20.10.27/layer/empty.go (about) 1 package layer // import "github.com/docker/docker/layer" 2 3 import ( 4 "archive/tar" 5 "bytes" 6 "fmt" 7 "io" 8 ) 9 10 // DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file - 11 // (1024 NULL bytes) 12 const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef") 13 14 type emptyLayer struct{} 15 16 // EmptyLayer is a layer that corresponds to empty tar. 17 var EmptyLayer = &emptyLayer{} 18 19 func (el *emptyLayer) TarStream() (io.ReadCloser, error) { 20 buf := new(bytes.Buffer) 21 tarWriter := tar.NewWriter(buf) 22 tarWriter.Close() 23 return io.NopCloser(buf), nil 24 } 25 26 func (el *emptyLayer) TarStreamFrom(p ChainID) (io.ReadCloser, error) { 27 if p == "" { 28 return el.TarStream() 29 } 30 return nil, fmt.Errorf("can't get parent tar stream of an empty layer") 31 } 32 33 func (el *emptyLayer) ChainID() ChainID { 34 return ChainID(DigestSHA256EmptyTar) 35 } 36 37 func (el *emptyLayer) DiffID() DiffID { 38 return DigestSHA256EmptyTar 39 } 40 41 func (el *emptyLayer) Parent() Layer { 42 return nil 43 } 44 45 func (el *emptyLayer) Size() (size int64, err error) { 46 return 0, nil 47 } 48 49 func (el *emptyLayer) DiffSize() (size int64, err error) { 50 return 0, nil 51 } 52 53 func (el *emptyLayer) Metadata() (map[string]string, error) { 54 return make(map[string]string), nil 55 } 56 57 // IsEmpty returns true if the layer is an EmptyLayer 58 func IsEmpty(diffID DiffID) bool { 59 return diffID == DigestSHA256EmptyTar 60 }