github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/pkg/fileutil/embed.go (about)

     1  package fileutil
     2  
     3  import (
     4  	"embed"
     5  	"github.com/drud/ddev/pkg/nodeps"
     6  	"os"
     7  	"path"
     8  	"path/filepath"
     9  )
    10  
    11  // CopyEmbedAssets copies files in the named embed.FS sourceDir to the local targetDir (full path)
    12  func CopyEmbedAssets(fsys embed.FS, sourceDir string, targetDir string) error {
    13  	subdirs, err := fsys.ReadDir(sourceDir)
    14  	if err != nil {
    15  		return err
    16  	}
    17  	for _, d := range subdirs {
    18  		sourcePath := path.Join(sourceDir, d.Name())
    19  		if d.IsDir() {
    20  			err = CopyEmbedAssets(fsys, path.Join(sourceDir, d.Name()), path.Join(targetDir, d.Name()))
    21  			if err != nil {
    22  				return err
    23  			}
    24  		} else {
    25  			localPath := filepath.Join(targetDir, d.Name())
    26  
    27  			sigFound, err := FgrepStringInFile(localPath, nodeps.DdevFileSignature)
    28  			if sigFound || err != nil {
    29  				content, err := fsys.ReadFile(sourcePath)
    30  				if err != nil {
    31  					return err
    32  				}
    33  				err = os.MkdirAll(filepath.Dir(localPath), 0755)
    34  				if err != nil {
    35  					return err
    36  				}
    37  				err = os.WriteFile(localPath, content, 0755)
    38  				if err != nil {
    39  					return err
    40  				}
    41  			}
    42  		}
    43  	}
    44  	return nil
    45  }