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 }