func()

in pkg/containerd/handler.go [83:115]


func (r *Registry) handleManifest(c pcontext.Context, dgst digest.Digest) {
	size, err := r.containerdStore.Size(c, dgst)
	if err != nil {
		//nolint
		c.AbortWithError(http.StatusNotFound, err)
		return
	} else if size >= maxManifestSize {
		//nolint
		c.AbortWithError(http.StatusNotFound, fmt.Errorf("refusing to serve a manifest larger than %v bytes, got: %v", maxManifestSize, size))
		return
	}

	b, mediaType, err := r.containerdStore.Bytes(c, dgst)
	if err != nil {
		//nolint
		c.AbortWithError(http.StatusInternalServerError, err)
		return
	}

	c.Header(contentTypeHeader, mediaType)
	c.Header(contentLengthHeader, strconv.FormatInt(int64(len(b)), 10))
	c.Header(dockerContentDigestHeader, dgst.String())

	if c.Request.Method == http.MethodHead {
		return
	}
	_, err = c.Writer.Write(b)
	if err != nil {
		//nolint
		c.AbortWithError(http.StatusServiceUnavailable, err)
		return
	}
}