in dev-tools/mage/pkgtypes.go [929:1007]
func addFileToTar(ar *tar.Writer, baseDir string, pkgFile PackageFile) error {
excludedFiles := []string{}
return filepath.WalkDir(pkgFile.Source, func(path string, d fs.DirEntry, err error) error {
if err != nil {
if pkgFile.SkipOnMissing && os.IsNotExist(err) {
return nil
}
return err
}
if slices.Contains(excludedFiles, d.Name()) {
// it's a file we have to exclude
if mg.Verbose() {
log.Printf("Skipping file %q...", path)
}
return nil
}
info, err := d.Info()
if err != nil {
return err
}
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
header.Uname, header.Gname = "root", "root"
header.Uid, header.Gid = 0, 0
switch {
case componentConfigFilePattern.MatchString(info.Name()):
header.Mode = int64(componentConfigMode & os.ModePerm)
case pkgFile.ConfigMode > 0 && configFilePattern.MatchString(info.Name()):
header.Mode = int64(pkgFile.ConfigMode & os.ModePerm)
case info.Mode().IsRegular() && pkgFile.Mode > 0:
header.Mode = int64(pkgFile.Mode & os.ModePerm)
case info.IsDir():
header.Mode = int64(0755)
}
if filepath.IsAbs(pkgFile.Target) {
baseDir = ""
}
relPath, err := filepath.Rel(pkgFile.Source, path)
if err != nil {
return err
}
header.Name = filepath.Join(baseDir, pkgFile.Target, relPath)
if info.IsDir() {
header.Name += string(filepath.Separator)
}
if mg.Verbose() {
log.Println("Adding", os.FileMode(mustConvertToUnit32(header.Mode)), header.Name)
}
if err := ar.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
return nil
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
if _, err = io.Copy(ar, file); err != nil {
return err
}
return file.Close()
})
}