mirror of https://github.com/containers/podman.git
integrating changes from #21768
Signed-off-by: Mario Loriedo <mario.loriedo@gmail.com>
This commit is contained in:
parent
fa99b9be93
commit
ea4553d590
|
@ -61,12 +61,12 @@ func newDecompressor(compressedFilePath string, compressedFileContent []byte) (d
|
|||
return newZipDecompressor(compressedFilePath)
|
||||
case compressionType == archive.Uncompressed:
|
||||
return newUncompressedDecompressor(compressedFilePath)
|
||||
// macOS gzipped VM images are sparse. As a result a
|
||||
// special decompressor is required: it uses crc os.CopySparse
|
||||
// instead of io.Copy and std lib gzip instead of klauspost/pgzip
|
||||
// (even if it's slower).
|
||||
// Using special compressors on MacOS because default ones
|
||||
// in c/image/pkg/compression are slow with sparse files.
|
||||
case compressionType == archive.Gzip && os == macOs:
|
||||
return newGzipDecompressor(compressedFilePath)
|
||||
case compressionType == archive.Zstd && os == macOs:
|
||||
return newZstdDecompressor(compressedFilePath)
|
||||
default:
|
||||
return newGenericDecompressor(compressedFilePath)
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@ package compression
|
|||
|
||||
import (
|
||||
"io"
|
||||
|
||||
crcOs "github.com/crc-org/crc/v2/pkg/os"
|
||||
)
|
||||
|
||||
type uncompressedDecompressor struct {
|
||||
|
@ -15,7 +13,8 @@ func newUncompressedDecompressor(compressedFilePath string) (*uncompressedDecomp
|
|||
return &uncompressedDecompressor{*d}, err
|
||||
}
|
||||
|
||||
func (*uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
||||
_, err := crcOs.CopySparse(w, r)
|
||||
func (d *uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
||||
sparseWriter := NewSparseWriter(w)
|
||||
_, err := io.Copy(sparseWriter, r)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package compression
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/klauspost/compress/zstd"
|
||||
)
|
||||
|
||||
type zstdDecompressor struct {
|
||||
genericDecompressor
|
||||
zstdReader *zstd.Decoder
|
||||
}
|
||||
|
||||
func newZstdDecompressor(compressedFilePath string) (*zstdDecompressor, error) {
|
||||
d, err := newGenericDecompressor(compressedFilePath)
|
||||
return &zstdDecompressor{*d, nil}, err
|
||||
}
|
||||
|
||||
func (d *zstdDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
||||
zstdReader, err := zstd.NewReader(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
d.zstdReader = zstdReader
|
||||
|
||||
sparseWriter := NewSparseWriter(w)
|
||||
_, err = io.Copy(sparseWriter, zstdReader)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *zstdDecompressor) close() {
|
||||
d.zstdReader.Close()
|
||||
d.genericDecompressor.close()
|
||||
}
|
Loading…
Reference in New Issue