mirror of https://github.com/containers/podman.git
Use faster gzip reader
Signed-off-by: Mario Loriedo <mario.loriedo@gmail.com>
This commit is contained in:
parent
2245cf8dc4
commit
0b3f3f0ef1
|
|
@ -6,6 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/containers/podman/v5/pkg/machine/define"
|
"github.com/containers/podman/v5/pkg/machine/define"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_compressionFromFile(t *testing.T) {
|
func Test_compressionFromFile(t *testing.T) {
|
||||||
|
|
@ -122,9 +123,9 @@ func Test_Decompress(t *testing.T) {
|
||||||
dstFilePath := tt.args.dst
|
dstFilePath := tt.args.dst
|
||||||
defer os.Remove(dstFilePath)
|
defer os.Remove(dstFilePath)
|
||||||
err := Decompress(srcVMFile, dstFilePath)
|
err := Decompress(srcVMFile, dstFilePath)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
data, err := os.ReadFile(dstFilePath)
|
data, err := os.ReadFile(dstFilePath)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, string(tt.want), string(data))
|
assert.Equal(t, string(tt.want), string(data))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ type decompressor interface {
|
||||||
compressedFileSize() int64
|
compressedFileSize() int64
|
||||||
compressedFileMode() os.FileMode
|
compressedFileMode() os.FileMode
|
||||||
compressedFileReader() (io.ReadCloser, error)
|
compressedFileReader() (io.ReadCloser, error)
|
||||||
decompress(w io.WriteSeeker, r io.Reader) error
|
decompress(w WriteSeekCloser, r io.Reader) error
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ func (d *genericDecompressor) compressedFileReader() (io.ReadCloser, error) {
|
||||||
return compressedFile, nil
|
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)
|
decompressedFileReader, _, err := compression.AutoDecompress(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
package compression
|
package compression
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"compress/gzip"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
crcOs "github.com/crc-org/crc/v2/pkg/os"
|
image "github.com/containers/image/v5/pkg/compression"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -18,13 +17,15 @@ func newGzipDecompressor(compressedFilePath string) (*gzipDecompressor, error) {
|
||||||
return &gzipDecompressor{*d, nil}, err
|
return &gzipDecompressor{*d, nil}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *gzipDecompressor) decompress(w io.WriteSeeker, r io.Reader) error {
|
func (d *gzipDecompressor) decompress(w WriteSeekCloser, r io.Reader) error {
|
||||||
gzReader, err := gzip.NewReader(r)
|
gzReader, err := image.GzipDecompressor(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.gzReader = gzReader
|
d.gzReader = gzReader
|
||||||
_, err = crcOs.CopySparse(w, gzReader)
|
|
||||||
|
sparseWriter := NewSparseWriter(w)
|
||||||
|
_, err = io.Copy(sparseWriter, gzReader)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ func newUncompressedDecompressor(compressedFilePath string) (*uncompressedDecomp
|
||||||
return &uncompressedDecompressor{*d}, err
|
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)
|
_, err := crcOs.CopySparse(w, r)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ func newXzDecompressor(compressedFilePath string) (*xzDecompressor, error) {
|
||||||
// Will error out if file without .Xz already exists
|
// Will error out if file without .Xz already exists
|
||||||
// Maybe extracting then renaming is a good idea here..
|
// Maybe extracting then renaming is a good idea here..
|
||||||
// depends on Xz: not pre-installed on mac, so it becomes a brew dependency
|
// 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 cmd *exec.Cmd
|
||||||
var read io.Reader
|
var read io.Reader
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ func (d *zipDecompressor) compressedFileReader() (io.ReadCloser, error) {
|
||||||
return z, nil
|
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)
|
_, err := io.Copy(w, r)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue