github.com/argoproj/argo-cd/v3@v3.2.1/test/fixture/path/files.go (about) 1 package path 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "path/filepath" 8 "testing" 9 ) 10 11 // CopyDir copies the contents of a directory from 'src' to 'dest' 12 func CopyDir(src string, dest string) error { 13 mode, err := os.Stat(src) 14 if err != nil { 15 return err 16 } 17 18 if mode.IsDir() { 19 dirContents, err := os.ReadDir(src) 20 if err != nil { 21 return err 22 } 23 24 for _, f := range dirContents { 25 srcFileaPath := filepath.Join(src, f.Name()) 26 destFilePath := filepath.Join(dest, f.Name()) 27 if err := CopyDir(srcFileaPath, destFilePath); err != nil { 28 return err 29 } 30 } 31 return nil 32 } 33 34 if err := os.MkdirAll(filepath.Dir(dest), os.ModePerm); err != nil { 35 return err 36 } 37 38 return copySingleFile(src, dest, mode) 39 } 40 41 func copySingleFile(src string, dest string, mode os.FileInfo) error { 42 if src == dest { 43 return nil 44 } 45 46 // Ensure the file is not a directory 47 file, err := os.Stat(src) 48 if err != nil { 49 return err 50 } 51 if file.IsDir() { 52 return fmt.Errorf("unable to copy directories: %s", src) 53 } 54 55 srcFile, err := os.Open(src) 56 if err != nil { 57 return err 58 } 59 defer srcFile.Close() 60 61 destFile, err := os.Create(dest) 62 if err != nil { 63 return err 64 } 65 defer destFile.Close() 66 67 err = os.Chmod(destFile.Name(), mode.Mode()) 68 if err != nil { 69 return err 70 } 71 72 _, err = io.Copy(destFile, srcFile) 73 if err != nil { 74 return err 75 } 76 77 return nil 78 } 79 80 // CreateSymlink creates a symlink with name linkName to file destName in 81 // workingDir 82 func CreateSymlink(t *testing.T, destName, linkName string) error { 83 t.Helper() 84 return os.Symlink(destName, linkName) 85 }