MCPcopy Create free account
hub / github.com/containerd/nerdctl / compressAndWriteLayer

Function compressAndWriteLayer

pkg/cmd/image/import.go:199–241  ·  view source on GitHub ↗
(ctx context.Context, w content.Writer, r io.Reader)

Source from the content-addressed store, hash-verified

197}
198
199func compressAndWriteLayer(ctx context.Context, w content.Writer, r io.Reader) (digest.Digest, digest.Digest, int64, error) {
200 digester := digest.Canonical.Digester()
201 tee := io.TeeReader(r, digester.Hash())
202 pr, pw := io.Pipe()
203 gz := gzip.NewWriter(pw)
204
205 doneCh := make(chan error, 1)
206 go func() {
207 defer func() {
208 _ = gz.Close()
209 }()
210
211 if _, err := io.Copy(gz, tee); err != nil {
212 doneCh <- err
213 _ = pw.CloseWithError(err)
214 return
215 }
216 if err := gz.Close(); err != nil {
217 doneCh <- err
218 _ = pw.CloseWithError(err)
219 return
220 }
221 doneCh <- pw.Close()
222 }()
223
224 n, err := io.Copy(w, pr)
225 if err != nil {
226 return "", "", 0, err
227 }
228 if err := <-doneCh; err != nil {
229 return "", "", 0, err
230 }
231
232 diffID := digester.Digest()
233 labels := map[string]string{
234 "containerd.io/uncompressed": diffID.String(),
235 }
236 if err := w.Commit(ctx, n, "", content.WithLabels(labels)); err != nil && !errdefs.IsAlreadyExists(err) {
237 return "", "", 0, err
238 }
239
240 return w.Digest(), diffID, n, nil
241}
242
243func buildImageConfig(diffID digest.Digest, options types.ImageImportOptions) ([]byte, digest.Digest, error) {
244 ociplat := platforms.DefaultSpec()

Callers 1

Calls 3

CopyMethod · 0.80
CloseMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…