Switch to new BPM file structure #8
@ -7,12 +7,16 @@ import (
|
||||
"os"
|
||||
)
|
||||
|
||||
func ReadTarballContent(tarballPath, fileToExtract string) ([]byte, error) {
|
||||
type TarballFileReader struct {
|
||||
tarReader *tar.Reader
|
||||
file *os.File
|
||||
}
|
||||
|
||||
func ReadTarballContent(tarballPath, fileToExtract string) (*TarballFileReader, error) {
|
||||
file, err := os.Open(tarballPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
tr := tar.NewReader(file)
|
||||
for {
|
||||
@ -28,11 +32,10 @@ func ReadTarballContent(tarballPath, fileToExtract string) ([]byte, error) {
|
||||
return nil, errors.New("file to extract must be a regular file")
|
||||
}
|
||||
|
||||
bytes, err := io.ReadAll(tr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return bytes, nil
|
||||
return &TarballFileReader{
|
||||
tarReader: tr,
|
||||
file: file,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,6 @@ package utils
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"errors"
|
||||
"fmt"
|
||||
@ -488,18 +487,19 @@ func extractPackage(bpmpkg *BPMPackage, verbose bool, filename, rootDir string)
|
||||
return err, nil
|
||||
}
|
||||
|
||||
content, err := ReadTarballContent(filename, "files.tar.gz")
|
||||
tarballFile, err := ReadTarballContent(filename, "files.tar.gz")
|
||||
if err != nil {
|
||||
return err, nil
|
||||
}
|
||||
defer tarballFile.file.Close()
|
||||
|
||||
archive, err := gzip.NewReader(bytes.NewReader(content))
|
||||
archive, err := gzip.NewReader(tarballFile.tarReader)
|
||||
if err != nil {
|
||||
return err, nil
|
||||
}
|
||||
tr := tar.NewReader(archive)
|
||||
packageFilesReader := tar.NewReader(archive)
|
||||
for {
|
||||
header, err := tr.Next()
|
||||
header, err := packageFilesReader.Next()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
@ -559,7 +559,7 @@ func extractPackage(bpmpkg *BPMPackage, verbose bool, filename, rootDir string)
|
||||
if err != nil {
|
||||
return err, nil
|
||||
}
|
||||
if _, err := io.Copy(outFile, tr); err != nil {
|
||||
if _, err := io.Copy(outFile, packageFilesReader); err != nil {
|
||||
return err, nil
|
||||
}
|
||||
if err := os.Chmod(extractFilename, header.FileInfo().Mode()); err != nil {
|
||||
@ -1119,12 +1119,14 @@ func InstallPackage(filename, rootDir string, verbose, force, binaryPkgFromSrc,
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
bs, err := ReadTarballContent(filename, "pkg.files")
|
||||
|
||||
tarballFile, err := ReadTarballContent(filename, "pkg.files")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = f.Write(bs)
|
||||
err = f.Close()
|
||||
defer tarballFile.file.Close()
|
||||
|
||||
_, err = io.Copy(f, tarballFile.tarReader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user