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
} |