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

Method OCITarReader

src/cmd/linuxkit/cache/imagesource.go:120–177  ·  view source on GitHub ↗

OCITarReader return an io.ReadCloser to read the image as a v1 tarball

(overrideName string)

Source from the content-addressed store, hash-verified

118
119// OCITarReader return an io.ReadCloser to read the image as a v1 tarball
120func (c ImageSource) OCITarReader(overrideName string) (io.ReadCloser, error) {
121 imageName := c.ref.String()
122 saveName := imageName
123 if overrideName != "" {
124 saveName = overrideName
125 }
126 refName, err := name.ParseReference(saveName)
127 if err != nil {
128 return nil, fmt.Errorf("error parsing image name: %v", err)
129 }
130 // get a reference to the image
131 image, err := c.provider.findImage(imageName, *c.platform)
132 if err != nil {
133 return nil, err
134 }
135 // convert the writer to a reader
136 r, w := io.Pipe()
137 go func() {
138 defer func() { _ = w.Close() }()
139 tw := tar.NewWriter(w)
140 defer func() { _ = tw.Close() }()
141 if err := writeLayoutHeader(tw); err != nil {
142 _ = w.CloseWithError(err)
143 return
144 }
145
146 if err := writeLayoutImage(tw, image); err != nil {
147 _ = w.CloseWithError(err)
148 return
149 }
150
151 imageDigest, err := image.Digest()
152 if err != nil {
153 _ = w.CloseWithError(err)
154 return
155 }
156 imageSize, err := image.Size()
157 if err != nil {
158 _ = w.CloseWithError(err)
159 return
160 }
161
162 // write the index file
163 desc := v1.Descriptor{
164 MediaType: types.OCIImageIndex,
165 Size: imageSize,
166 Digest: imageDigest,
167 Annotations: map[string]string{
168 imagespec.AnnotationRefName: refName.String(),
169 },
170 }
171 if err := writeLayoutIndex(tw, desc); err != nil {
172 _ = w.CloseWithError(err)
173 return
174 }
175 }()
176 return r, nil
177}

Callers

nothing calls this directly

Calls 7

CloseMethod · 0.95
writeLayoutHeaderFunction · 0.85
writeLayoutImageFunction · 0.85
writeLayoutIndexFunction · 0.85
findImageMethod · 0.80
StringMethod · 0.65
DigestMethod · 0.65

Tested by

no test coverage detected