in tools/build_tar/buildtar.go [375:403]
func (f *tarFile) makeDirs(header tar.Header) error {
dirToMake := []string{}
dir := header.Name
for {
dir = filepath.Dir(dir)
if dir == "." || dir == "/" {
break
}
dirToMake = append(dirToMake, dir)
}
for i := len(dirToMake) - 1; i >= 0; i-- {
dir := dirToMake[i]
if _, ok := f.dirsMade[dir]; ok {
continue
}
dh := header
// Add the x bit to directories if the read bit is set,
// and make sure all directories are at least user RWX.
dh.Mode = header.Mode | 0700 | ((0444 & header.Mode) >> 2)
dh.Typeflag = tar.TypeDir
dh.Name = dir + "/"
if err := f.tw.WriteHeader(&dh); err != nil {
return err
}
f.dirsMade[dir] = struct{}{}
}
return nil
}