Use faster gzip reader

Signed-off-by: Mario Loriedo <mario.loriedo@gmail.com>
This commit is contained in:
Mario Loriedo 2024-02-21 16:02:59 +01:00
parent 2245cf8dc4
commit 0b3f3f0ef1
7 changed files with 14 additions and 12 deletions

View File

@ -6,6 +6,7 @@ import (
"github.com/containers/podman/v5/pkg/machine/define"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_compressionFromFile(t *testing.T) {
@ -122,9 +123,9 @@ func Test_Decompress(t *testing.T) {
dstFilePath := tt.args.dst
defer os.Remove(dstFilePath)
err := Decompress(srcVMFile, dstFilePath)
assert.NoError(t, err)
require.NoError(t, err)
data, err := os.ReadFile(dstFilePath)
assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, string(tt.want), string(data))
})
}

View File

@ -25,7 +25,7 @@ type decompressor interface {
compressedFileSize() int64
compressedFileMode() os.FileMode
compressedFileReader() (io.ReadCloser, error)
decompress(w io.WriteSeeker, r io.Reader) error
decompress(w WriteSeekCloser, r io.Reader) error
close()
}

View File

@ -44,7 +44,7 @@ func (d *genericDecompressor) compressedFileReader() (io.ReadCloser, error) {
return compressedFile, nil
}
func (d *genericDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
func (d *genericDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
decompressedFileReader, _, err := compression.AutoDecompress(r)
if err != nil {
return err

View File

@ -1,10 +1,9 @@
package compression
import (
"compress/gzip"
"io"
crcOs "github.com/crc-org/crc/v2/pkg/os"
image "github.com/containers/image/v5/pkg/compression"
"github.com/sirupsen/logrus"
)
@ -18,13 +17,15 @@ func newGzipDecompressor(compressedFilePath string) (*gzipDecompressor, error) {
return &gzipDecompressor{*d, nil}, err
}
func (d *gzipDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
gzReader, err := gzip.NewReader(r)
func (d *gzipDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
gzReader, err := image.GzipDecompressor(r)
if err != nil {
return err
}
d.gzReader = gzReader
_, err = crcOs.CopySparse(w, gzReader)
sparseWriter := NewSparseWriter(w)
_, err = io.Copy(sparseWriter, gzReader)
return err
}

View File

@ -15,7 +15,7 @@ func newUncompressedDecompressor(compressedFilePath string) (*uncompressedDecomp
return &uncompressedDecompressor{*d}, err
}
func (*uncompressedDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
func (*uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
_, err := crcOs.CopySparse(w, r)
return err
}

View File

@ -22,7 +22,7 @@ func newXzDecompressor(compressedFilePath string) (*xzDecompressor, error) {
// Will error out if file without .Xz already exists
// Maybe extracting then renaming is a good idea here..
// depends on Xz: not pre-installed on mac, so it becomes a brew dependency
func (*xzDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
func (*xzDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
var cmd *exec.Cmd
var read io.Reader

View File

@ -40,7 +40,7 @@ func (d *zipDecompressor) compressedFileReader() (io.ReadCloser, error) {
return z, nil
}
func (*zipDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
func (*zipDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
_, err := io.Copy(w, r)
return err
}