func CopyDir()

in pkg/osutil/osutil.go [85:132]


func CopyDir(
	fileSys fs.FS,
	src, dest string,
	draftConfig *config.DraftConfig,
	templateWriter templatewriter.TemplateWriter) error {
	files, err := fs.ReadDir(fileSys, src)
	if err != nil {
		return err
	}

	for _, f := range files {

		if f.Name() == configFileName {
			continue
		}

		fileName := f.Name()
		if overrideName, ok := draftConfig.FileNameOverrideMap[f.Name()]; ok {
			fileName = overrideName
		}
		srcPath := path.Join(src, f.Name())
		destPath := path.Join(dest, fileName)
		log.Debugf("Source path: %s Dest path: %s", srcPath, destPath)

		if f.IsDir() {
			if err = templateWriter.EnsureDirectory(destPath); err != nil {
				return err
			}
			if err = CopyDir(fileSys, srcPath, destPath, draftConfig, templateWriter); err != nil {
				return err
			}
		} else {
			fileContent, err := replaceTemplateVariables(fileSys, srcPath, draftConfig)
			if err != nil {
				return err
			}

			if err = checkAllVariablesSubstituted(string(fileContent)); err != nil {
				return fmt.Errorf("error substituting file %s: %w", srcPath, err)
			}

			if err = templateWriter.WriteFile(destPath, fileContent); err != nil {
				return err
			}
		}
	}
	return nil
}