MCPcopy Index your code
hub / github.com/linuxkit/linuxkit / writeLayoutImage

Function writeLayoutImage

src/cmd/linuxkit/cache/layout.go:48–102  ·  view source on GitHub ↗
(tw *tar.Writer, image v1.Image)

Source from the content-addressed store, hash-verified

46}
47
48func writeLayoutImage(tw *tar.Writer, image v1.Image) error {
49 // write config, each layer, manifest, saving the digest for each
50 manifest, err := image.Manifest()
51 if err != nil {
52 return err
53 }
54 configDesc := manifest.Config
55 configBytes, err := image.RawConfigFile()
56 if err != nil {
57 return err
58 }
59 if err := writeLayoutBlob(tw, configDesc.Digest.Hex, configDesc.Size, bytes.NewReader(configBytes)); err != nil {
60 return err
61 }
62
63 layers, err := image.Layers()
64 if err != nil {
65 return err
66 }
67 for _, layer := range layers {
68 blob, err := layer.Compressed()
69 if err != nil {
70 return err
71 }
72 defer func() { _ = blob.Close() }()
73 blobDigest, err := layer.Digest()
74 if err != nil {
75 return err
76 }
77 blobSize, err := layer.Size()
78 if err != nil {
79 return err
80 }
81 if err := writeLayoutBlob(tw, blobDigest.Hex, blobSize, blob); err != nil {
82 return err
83 }
84 }
85 // write the manifest
86 manifestSize, err := image.Size()
87 if err != nil {
88 return err
89 }
90 manifestDigest, err := image.Digest()
91 if err != nil {
92 return err
93 }
94 manifestBytes, err := image.RawManifest()
95 if err != nil {
96 return err
97 }
98 if err := writeLayoutBlob(tw, manifestDigest.Hex, manifestSize, bytes.NewReader(manifestBytes)); err != nil {
99 return err
100 }
101 return nil
102}
103
104func writeLayoutBlob(tw *tar.Writer, digest string, size int64, blob io.Reader) error {
105 if err := tw.WriteHeader(&tar.Header{

Callers 2

OCITarReaderMethod · 0.85
OCITarReaderMethod · 0.85

Calls 3

writeLayoutBlobFunction · 0.85
DigestMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected