in tools/build_tar/buildtar.go [161:202]
func newTarFile(output, directory, compression string, meta fileMeta) (*tarFile, error) {
var (
w io.Writer
closers []func()
)
f, err := os.Create(output)
if err != nil {
return nil, err
}
closers = append(closers, func() {
f.Close()
})
w = f
buf := bufio.NewWriter(w)
closers = append(closers, func() { buf.Flush() })
w = buf
switch compression {
case "":
case "gz":
gzw := pargzip.NewWriter(w)
closers = append(closers, func() { gzw.Close() })
w = gzw
case "bz2", "xz":
return nil, fmt.Errorf("%q compression is not supported yet", compression)
default:
return nil, fmt.Errorf("unknown compression %q", compression)
}
tw := tar.NewWriter(w)
closers = append(closers, func() { tw.Close() })
return &tarFile{
directory: directory,
tw: tw,
closers: closers,
meta: meta,
dirsMade: map[string]struct{}{},
filesMade: map[string]struct{}{},
}, nil
}