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