package chartutil import ( "archive/tar" "compress/gzip" "io" "os" "path/filepath" ) // Expand uncompresses and extracts a chart into the specified directory. func Expand(dir string, r io.Reader) error { gr, err := gzip.NewReader(r) if err != nil { return err } defer gr.Close() tr := tar.NewReader(gr) for { header, err := tr.Next() if err == io.EOF { break } else if err != nil { return err } path := filepath.Clean(filepath.Join(dir, header.Name)) info := header.FileInfo() if info.IsDir() { if err = os.MkdirAll(path, info.Mode()); err != nil { return err } continue } file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode()) if err != nil { return err } defer file.Close() _, err = io.Copy(file, tr) if err != nil { return err } } return nil }