Skip to content

Commit e29dcb9

Browse files
committed
Print warning if mediaType does not match selected compression
1 parent 478905c commit e29dcb9

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

pkg/v1/tarball/layer.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,12 @@ type LayerOption func(*layer)
9696

9797
// WithCompression is a functional option for overriding the default
9898
// compression algorithm used for compressing uncompressed tarballs.
99-
// Also sets the mediaType to "application/vnd.oci.image.layer.v1.tar+zstd"
100-
// if zstd compression is selected.
99+
// Please note that WithCompression(compression.ZStd) should be used
100+
// in conjunction with WithMediaType(types.OCILayerZStd)
101101
func WithCompression(comp compression.Compression) LayerOption {
102102
return func(l *layer) {
103103
switch comp {
104104
case compression.ZStd:
105-
l.mediaType = types.OCILayerZStd
106105
l.compression = compression.ZStd
107106
case compression.GZip:
108107
l.compression = compression.GZip
@@ -125,7 +124,6 @@ func WithCompressionLevel(level int) LayerOption {
125124
}
126125

127126
// WithMediaType is a functional option for overriding the layer's media type.
128-
// Note that WithCompression overrides the mediaType if zstd compression is selected.
129127
func WithMediaType(mt types.MediaType) LayerOption {
130128
return func(l *layer) {
131129
l.mediaType = mt
@@ -282,6 +280,23 @@ func LayerFromOpener(opener Opener, opts ...LayerOption) (v1.Layer, error) {
282280
opt(layer)
283281
}
284282

283+
// Warn if media type does not match compression
284+
var mediaTypeMismatch = false
285+
switch layer.compression {
286+
case compression.GZip:
287+
mediaTypeMismatch =
288+
layer.mediaType != types.OCILayer &&
289+
layer.mediaType != types.OCIRestrictedLayer &&
290+
layer.mediaType != types.DockerLayer
291+
292+
case compression.ZStd:
293+
mediaTypeMismatch = layer.mediaType != types.OCILayerZStd
294+
}
295+
296+
if mediaTypeMismatch {
297+
logs.Warn.Printf("Unexpected mediaType (%s) for selected compression in %s in LayerFromOpener().", layer.mediaType, layer.compression)
298+
}
299+
285300
if layer.digest, layer.size, err = computeDigest(layer.compressedopener); err != nil {
286301
return nil, err
287302
}

0 commit comments

Comments
 (0)