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