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)
|
return newZipDecompressor(compressedFilePath)
|
||||||
case compressionType == archive.Uncompressed:
|
case compressionType == archive.Uncompressed:
|
||||||
return newUncompressedDecompressor(compressedFilePath)
|
return newUncompressedDecompressor(compressedFilePath)
|
||||||
// macOS gzipped VM images are sparse. As a result a
|
// Using special compressors on MacOS because default ones
|
||||||
// special decompressor is required: it uses crc os.CopySparse
|
// in c/image/pkg/compression are slow with sparse files.
|
||||||
// instead of io.Copy and std lib gzip instead of klauspost/pgzip
|
|
||||||
// (even if it's slower).
|
|
||||||
case compressionType == archive.Gzip && os == macOs:
|
case compressionType == archive.Gzip && os == macOs:
|
||||||
return newGzipDecompressor(compressedFilePath)
|
return newGzipDecompressor(compressedFilePath)
|
||||||
|
case compressionType == archive.Zstd && os == macOs:
|
||||||
|
return newZstdDecompressor(compressedFilePath)
|
||||||
default:
|
default:
|
||||||
return newGenericDecompressor(compressedFilePath)
|
return newGenericDecompressor(compressedFilePath)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@ package compression
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
crcOs "github.com/crc-org/crc/v2/pkg/os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type uncompressedDecompressor struct {
|
type uncompressedDecompressor struct {
|
||||||
|
@ -15,7 +13,8 @@ func newUncompressedDecompressor(compressedFilePath string) (*uncompressedDecomp
|
||||||
return &uncompressedDecompressor{*d}, err
|
return &uncompressedDecompressor{*d}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
func (d *uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
||||||
_, err := crcOs.CopySparse(w, r)
|
sparseWriter := NewSparseWriter(w)
|
||||||
|
_, err := io.Copy(sparseWriter, r)
|
||||||
return err
|
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