@@ -65,17 +65,24 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
6565 }
6666 }
6767
68- if config .MediaType == "" {
69- config .MediaType = ocispec .MediaTypeImageLayerGzip
70- }
71-
7268 var isCompressed bool
73- switch config .MediaType {
74- case ocispec .MediaTypeImageLayer :
75- case ocispec .MediaTypeImageLayerGzip :
69+ if config .Compressor != nil {
70+ if config .MediaType == "" {
71+ return emptyDesc , errors .New ("media type must be explicitly specified when using custom compressor" )
72+ }
7673 isCompressed = true
77- default :
78- return emptyDesc , errors .Wrapf (errdefs .ErrNotImplemented , "unsupported diff media type: %v" , config .MediaType )
74+ } else {
75+ if config .MediaType == "" {
76+ config .MediaType = ocispec .MediaTypeImageLayerGzip
77+ }
78+
79+ switch config .MediaType {
80+ case ocispec .MediaTypeImageLayer :
81+ case ocispec .MediaTypeImageLayerGzip :
82+ isCompressed = true
83+ default :
84+ return emptyDesc , errors .Wrapf (errdefs .ErrNotImplemented , "unsupported diff media type: %v" , config .MediaType )
85+ }
7986 }
8087
8188 var ocidesc ocispec.Descriptor
@@ -118,9 +125,16 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
118125 if isCompressed {
119126 dgstr := digest .SHA256 .Digester ()
120127 var compressed io.WriteCloser
121- compressed , errOpen = compression .CompressStream (cw , compression .Gzip )
122- if errOpen != nil {
123- return errors .Wrap (errOpen , "failed to get compressed stream" )
128+ if config .Compressor != nil {
129+ compressed , errOpen = config .Compressor (cw , config .MediaType )
130+ if errOpen != nil {
131+ return errors .Wrap (errOpen , "failed to get compressed stream" )
132+ }
133+ } else {
134+ compressed , errOpen = compression .CompressStream (cw , compression .Gzip )
135+ if errOpen != nil {
136+ return errors .Wrap (errOpen , "failed to get compressed stream" )
137+ }
124138 }
125139 errOpen = archive .WriteDiff (ctx , io .MultiWriter (compressed , dgstr .Hash ()), lowerRoot , upperRoot )
126140 compressed .Close ()
0 commit comments