distribution/pull_v2_windows.go
694df3ff
 // +build windows
 
 package distribution
 
 import (
05bd0435
 	"net/http"
 	"os"
694df3ff
 
6b7d0280
 	"github.com/Sirupsen/logrus"
05bd0435
 	"github.com/docker/distribution"
 	"github.com/docker/distribution/context"
2c60430a
 	"github.com/docker/distribution/manifest/schema2"
05bd0435
 	"github.com/docker/distribution/registry/client/transport"
694df3ff
 )
 
2c60430a
 var _ distribution.Describable = &v2LayerDescriptor{}
05bd0435
 
2c60430a
 func (ld *v2LayerDescriptor) Descriptor() distribution.Descriptor {
 	if ld.src.MediaType == schema2.MediaTypeForeignLayer && len(ld.src.URLs) > 0 {
 		return ld.src
 	}
 	return distribution.Descriptor{}
05bd0435
 }
 
 func (ld *v2LayerDescriptor) open(ctx context.Context) (distribution.ReadSeekCloser, error) {
2c60430a
 	if len(ld.src.URLs) == 0 {
05bd0435
 		blobs := ld.repo.Blobs(ctx)
 		return blobs.Open(ctx, ld.digest)
 	}
 
 	var (
 		err error
 		rsc distribution.ReadSeekCloser
 	)
 
 	// Find the first URL that results in a 200 result code.
2c60430a
 	for _, url := range ld.src.URLs {
6b7d0280
 		logrus.Debugf("Pulling %v from foreign URL %v", ld.digest, url)
05bd0435
 		rsc = transport.NewHTTPReadSeeker(http.DefaultClient, url, nil)
 		_, err = rsc.Seek(0, os.SEEK_SET)
 		if err == nil {
 			break
 		}
6b7d0280
 		logrus.Debugf("Download for %v failed: %v", ld.digest, err)
05bd0435
 		rsc.Close()
 		rsc = nil
 	}
 	return rsc, err
 }