Merge pull request #388 from ianberinger/master
Update go-containerregistry dependency
This commit is contained in:
commit
03db09e95f
|
|
@ -431,7 +431,7 @@
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:edf64d541c12aaf4f279642ea9939f035dcc9fc2edf649aba295e9cbca2c28d4"
|
digest = "1:764d0a9bb2c987d9333c5b0a256bc94791db50c0b5be2fa10f2247b1dcbd7a04"
|
||||||
name = "github.com/google/go-containerregistry"
|
name = "github.com/google/go-containerregistry"
|
||||||
packages = [
|
packages = [
|
||||||
"pkg/authn",
|
"pkg/authn",
|
||||||
|
|
@ -450,7 +450,7 @@
|
||||||
"pkg/v1/v1util",
|
"pkg/v1/v1util",
|
||||||
]
|
]
|
||||||
pruneopts = "NUT"
|
pruneopts = "NUT"
|
||||||
revision = "03167950e20ac82689f50828811e69cdd9e02af2"
|
revision = "24bbadfcffb5e05b1578cb2bd5438992ada3b546"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:f4f203acd8b11b8747bdcd91696a01dbc95ccb9e2ca2db6abf81c3a4f5e950ce"
|
digest = "1:f4f203acd8b11b8747bdcd91696a01dbc95ccb9e2ca2db6abf81c3a4f5e950ce"
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,11 @@ func (i *compressedImageExtender) Layers() ([]v1.Layer, error) {
|
||||||
|
|
||||||
// LayerByDigest implements v1.Image
|
// LayerByDigest implements v1.Image
|
||||||
func (i *compressedImageExtender) LayerByDigest(h v1.Hash) (v1.Layer, error) {
|
func (i *compressedImageExtender) LayerByDigest(h v1.Hash) (v1.Layer, error) {
|
||||||
|
if cfgName, err := i.ConfigName(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if cfgName == h {
|
||||||
|
return ConfigLayer(i)
|
||||||
|
}
|
||||||
cl, err := i.CompressedImageCore.LayerByDigest(h)
|
cl, err := i.CompressedImageCore.LayerByDigest(h)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,12 @@ type UncompressedLayer interface {
|
||||||
// uncompressedLayerExtender implements v1.Image using the uncompressed base properties.
|
// uncompressedLayerExtender implements v1.Image using the uncompressed base properties.
|
||||||
type uncompressedLayerExtender struct {
|
type uncompressedLayerExtender struct {
|
||||||
UncompressedLayer
|
UncompressedLayer
|
||||||
// TODO(mattmoor): Memoize size/hash so that the methods aren't twice as
|
// Memoize size/hash so that the methods aren't twice as
|
||||||
// expensive as doing this manually.
|
// expensive as doing this manually.
|
||||||
|
hash v1.Hash
|
||||||
|
size int64
|
||||||
|
hashSizeError error
|
||||||
|
once sync.Once
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compressed implements v1.Layer
|
// Compressed implements v1.Layer
|
||||||
|
|
@ -52,29 +56,31 @@ func (ule *uncompressedLayerExtender) Compressed() (io.ReadCloser, error) {
|
||||||
|
|
||||||
// Digest implements v1.Layer
|
// Digest implements v1.Layer
|
||||||
func (ule *uncompressedLayerExtender) Digest() (v1.Hash, error) {
|
func (ule *uncompressedLayerExtender) Digest() (v1.Hash, error) {
|
||||||
r, err := ule.Compressed()
|
ule.calcSizeHash()
|
||||||
if err != nil {
|
return ule.hash, ule.hashSizeError
|
||||||
return v1.Hash{}, err
|
|
||||||
}
|
|
||||||
defer r.Close()
|
|
||||||
h, _, err := v1.SHA256(r)
|
|
||||||
return h, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Size implements v1.Layer
|
// Size implements v1.Layer
|
||||||
func (ule *uncompressedLayerExtender) Size() (int64, error) {
|
func (ule *uncompressedLayerExtender) Size() (int64, error) {
|
||||||
r, err := ule.Compressed()
|
ule.calcSizeHash()
|
||||||
if err != nil {
|
return ule.size, ule.hashSizeError
|
||||||
return -1, err
|
}
|
||||||
}
|
|
||||||
defer r.Close()
|
func (ule *uncompressedLayerExtender) calcSizeHash() {
|
||||||
_, i, err := v1.SHA256(r)
|
ule.once.Do(func() {
|
||||||
return i, err
|
var r io.ReadCloser
|
||||||
|
r, ule.hashSizeError = ule.Compressed()
|
||||||
|
if ule.hashSizeError != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
ule.hash, ule.size, ule.hashSizeError = v1.SHA256(r)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// UncompressedToLayer fills in the missing methods from an UncompressedLayer so that it implements v1.Layer
|
// UncompressedToLayer fills in the missing methods from an UncompressedLayer so that it implements v1.Layer
|
||||||
func UncompressedToLayer(ul UncompressedLayer) (v1.Layer, error) {
|
func UncompressedToLayer(ul UncompressedLayer) (v1.Layer, error) {
|
||||||
return &uncompressedLayerExtender{ul}, nil
|
return &uncompressedLayerExtender{UncompressedLayer: ul}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UncompressedImageCore represents the bare minimum interface a natively
|
// UncompressedImageCore represents the bare minimum interface a natively
|
||||||
|
|
|
||||||
35
vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go
generated
vendored
35
vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go
generated
vendored
|
|
@ -46,22 +46,37 @@ var _ http.RoundTripper = (*bearerTransport)(nil)
|
||||||
|
|
||||||
// RoundTrip implements http.RoundTripper
|
// RoundTrip implements http.RoundTripper
|
||||||
func (bt *bearerTransport) RoundTrip(in *http.Request) (*http.Response, error) {
|
func (bt *bearerTransport) RoundTrip(in *http.Request) (*http.Response, error) {
|
||||||
hdr, err := bt.bearer.Authorization()
|
sendRequest := func() (*http.Response, error) {
|
||||||
|
hdr, err := bt.bearer.Authorization()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// http.Client handles redirects at a layer above the http.RoundTripper
|
||||||
|
// abstraction, so to avoid forwarding Authorization headers to places
|
||||||
|
// we are redirected, only set it when the authorization header matches
|
||||||
|
// the registry with which we are interacting.
|
||||||
|
if in.Host == bt.registry.RegistryStr() {
|
||||||
|
in.Header.Set("Authorization", hdr)
|
||||||
|
}
|
||||||
|
in.Header.Set("User-Agent", transportName)
|
||||||
|
return bt.inner.RoundTrip(in)
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := sendRequest()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// http.Client handles redirects at a layer above the http.RoundTripper
|
// Perform a token refresh() and retry the request in case the token has expired
|
||||||
// abstraction, so to avoid forwarding Authorization headers to places
|
if res.StatusCode == http.StatusUnauthorized {
|
||||||
// we are redirected, only set it when the authorization header matches
|
if err = bt.refresh(); err != nil {
|
||||||
// the registry with which we are interacting.
|
return nil, err
|
||||||
if in.Host == bt.registry.RegistryStr() {
|
}
|
||||||
in.Header.Set("Authorization", hdr)
|
return sendRequest()
|
||||||
}
|
}
|
||||||
in.Header.Set("User-Agent", transportName)
|
|
||||||
|
|
||||||
// TODO(mattmoor): On 401s perform a single refresh() and retry.
|
return res, err
|
||||||
return bt.inner.RoundTrip(in)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bt *bearerTransport) refresh() error {
|
func (bt *bearerTransport) refresh() error {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue