github.com/moby/docker@v26.1.3+incompatible/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() int64 {
    46  	return 0
    47  }
    48  
    49  func (el *emptyLayer) DiffSize() int64 {
    50  	return 0
    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  }