in pkg/rbeconfigsgen/rbeconfigsgen.go [791:826]
func copyCppConfigsToOutputDir(outDir string, cppConfigsTarball string) error {
in, err := os.Open(cppConfigsTarball)
if err != nil {
return fmt.Errorf("unable to open input tarball %q for reading: %w", cppConfigsTarball, err)
}
defer in.Close()
inTar := tar.NewReader(in)
outDir = path.Join(outDir, "cc")
for {
h, err := inTar.Next()
if err == io.EOF {
break
}
if err != nil {
return fmt.Errorf("error while reading input tarball %q: %w", cppConfigsTarball, err)
}
if h.Typeflag != tar.TypeReg {
continue
}
filePath := path.Join(outDir, h.Name)
dirPath := path.Dir(filePath)
if err := os.MkdirAll(dirPath, os.ModePerm); err != nil {
return fmt.Errorf("unable to create directory %q to extract file %q from the C++ config tarball %q: %w", dirPath, h.Name, cppConfigsTarball, err)
}
o, err := os.Create(filePath)
if err != nil {
return fmt.Errorf("failed to create file %q for writing %q from the C++ config tarball %q: %w", filePath, h.Name, cppConfigsTarball, err)
}
if _, err := io.Copy(o, inTar); err != nil {
return fmt.Errorf("error while extracting %q from %q to %q: %w", h.Name, cppConfigsTarball, filePath, err)
}
o.Close()
}
return nil
}