in scripts/pusher/main.go [177:233]
func extract(archive string) (dir string, err error) {
f, err := os.Open(archive)
if err != nil {
return "", err
}
tempDir, err := os.MkdirTemp("", "tar-extract-")
if err != nil {
return "", err
}
defer func() {
if err != nil {
os.RemoveAll(tempDir)
}
}()
tarReader := tar.NewReader(f)
for {
hdr, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
return "", err
}
// ignore non-files, they're not found in oci-layout
if hdr.Typeflag != tar.TypeReg {
continue
}
if err := func() error {
targetPath := filepath.Join(tempDir, hdr.Name)
if err := os.MkdirAll(filepath.Dir(targetPath), 0755); err != nil {
return err
}
file, err := os.Create(targetPath)
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(file, tarReader); err != nil {
return err
}
return file.Close()
}(); err != nil {
return "", err
}
}
return tempDir, nil
}