diff --git a/pkg/machine/compression/generic.go b/pkg/machine/compression/generic.go index 7f808c2d67..118a914fe9 100644 --- a/pkg/machine/compression/generic.go +++ b/pkg/machine/compression/generic.go @@ -63,3 +63,13 @@ func (d *genericDecompressor) close() { logrus.Errorf("Unable to close compressed file: %q", err) } } + +func (d *genericDecompressor) sparseOptimizedCopy(w WriteSeekCloser, r io.Reader) error { + var err error + sparseWriter := NewSparseWriter(w) + defer func() { + err = sparseWriter.Close() + }() + _, err = io.Copy(sparseWriter, r) + return err +} diff --git a/pkg/machine/compression/gzip.go b/pkg/machine/compression/gzip.go index f00830dc76..1df7a5f471 100644 --- a/pkg/machine/compression/gzip.go +++ b/pkg/machine/compression/gzip.go @@ -27,13 +27,5 @@ func (d *gzipDecompressor) decompress(w WriteSeekCloser, r io.Reader) error { } }() - sparseWriter := NewSparseWriter(w) - defer func() { - if err := sparseWriter.Close(); err != nil { - logrus.Errorf("Unable to close uncompressed file: %q", err) - } - }() - - _, err = io.Copy(sparseWriter, gzReader) - return err + return d.sparseOptimizedCopy(w, gzReader) } diff --git a/pkg/machine/compression/uncompressed.go b/pkg/machine/compression/uncompressed.go index 8bb5ab43a5..dd1a17b66d 100644 --- a/pkg/machine/compression/uncompressed.go +++ b/pkg/machine/compression/uncompressed.go @@ -2,8 +2,6 @@ package compression import ( "io" - - "github.com/sirupsen/logrus" ) type uncompressedDecompressor struct { @@ -16,13 +14,5 @@ func newUncompressedDecompressor(compressedFilePath string) (*uncompressedDecomp } func (d *uncompressedDecompressor) decompress(w WriteSeekCloser, r io.Reader) error { - sparseWriter := NewSparseWriter(w) - defer func() { - if err := sparseWriter.Close(); err != nil { - logrus.Errorf("Unable to close uncompressed file: %q", err) - } - }() - - _, err := io.Copy(sparseWriter, r) - return err + return d.sparseOptimizedCopy(w, r) } diff --git a/pkg/machine/compression/zstd.go b/pkg/machine/compression/zstd.go index be3b1fd825..33718a8035 100644 --- a/pkg/machine/compression/zstd.go +++ b/pkg/machine/compression/zstd.go @@ -4,7 +4,6 @@ import ( "io" "github.com/klauspost/compress/zstd" - "github.com/sirupsen/logrus" ) type zstdDecompressor struct { @@ -23,13 +22,5 @@ func (d *zstdDecompressor) decompress(w WriteSeekCloser, r io.Reader) error { } defer zstdReader.Close() - sparseWriter := NewSparseWriter(w) - defer func() { - if err := sparseWriter.Close(); err != nil { - logrus.Errorf("Unable to close uncompressed file: %q", err) - } - }() - - _, err = io.Copy(sparseWriter, zstdReader) - return err + return d.sparseOptimizedCopy(w, zstdReader) }