in ecr/fetcher.go [180:207]
func (f *ecrFetcher) fetchLayerHtcat(ctx context.Context, desc ocispec.Descriptor, downloadURL string) (io.ReadCloser, error) {
log.G(ctx).WithField("url", downloadURL).Debug("ecr.fetcher.layer.htcat")
parsedURL, err := url.Parse(downloadURL)
if err != nil {
log.G(ctx).
WithError(err).
WithField("url", downloadURL).
Error("ecr.fetcher.layer.htcat: failed to parse URL")
return nil, err
}
hc := f.httpClient
if hc == nil {
hc = http.DefaultClient
}
htc := htcat.New(hc, parsedURL, f.parallelism)
pr, pw := io.Pipe()
go func() {
defer pw.Close()
_, err := htc.WriteTo(pw)
if err != nil {
log.G(ctx).
WithError(err).
WithField("url", downloadURL).
Error("ecr.fetcher.layer.htcat: failed to download layer")
}
}()
return pr, nil
}