empty.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package layer
  2. import (
  3. "archive/tar"
  4. "bytes"
  5. "fmt"
  6. "io"
  7. "io/ioutil"
  8. )
  9. // DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file -
  10. // (1024 NULL bytes)
  11. const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef")
  12. type emptyLayer struct{}
  13. // EmptyLayer is a layer that corresponds to empty tar.
  14. var EmptyLayer = &emptyLayer{}
  15. func (el *emptyLayer) TarStream() (io.ReadCloser, error) {
  16. buf := new(bytes.Buffer)
  17. tarWriter := tar.NewWriter(buf)
  18. tarWriter.Close()
  19. return ioutil.NopCloser(buf), nil
  20. }
  21. func (el *emptyLayer) TarStreamFrom(p ChainID) (io.ReadCloser, error) {
  22. if p == "" {
  23. return el.TarStream()
  24. }
  25. return nil, fmt.Errorf("can't get parent tar stream of an empty layer")
  26. }
  27. func (el *emptyLayer) ChainID() ChainID {
  28. return ChainID(DigestSHA256EmptyTar)
  29. }
  30. func (el *emptyLayer) DiffID() DiffID {
  31. return DigestSHA256EmptyTar
  32. }
  33. func (el *emptyLayer) Parent() Layer {
  34. return nil
  35. }
  36. func (el *emptyLayer) Size() (size int64, err error) {
  37. return 0, nil
  38. }
  39. func (el *emptyLayer) DiffSize() (size int64, err error) {
  40. return 0, nil
  41. }
  42. func (el *emptyLayer) Metadata() (map[string]string, error) {
  43. return make(map[string]string), nil
  44. }