|
@@ -1,33 +1,93 @@
|
|
|
package modules
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"io"
|
|
|
- "log"
|
|
|
"os"
|
|
|
- "os/exec"
|
|
|
)
|
|
|
|
|
|
-func CopyFile(src, dst string) {
|
|
|
- fin, err := os.Open(src)
|
|
|
+// func CopyFile(src, dst string) {
|
|
|
+// fin, err := os.Open(src)
|
|
|
+// if err != nil {
|
|
|
+// log.Fatal(err)
|
|
|
+// }
|
|
|
+// defer fin.Close()
|
|
|
+
|
|
|
+// fout, err := os.Create(dst)
|
|
|
+// if err != nil {
|
|
|
+// log.Fatal(err)
|
|
|
+// }
|
|
|
+// defer fout.Close()
|
|
|
+
|
|
|
+// _, err = io.Copy(fout, fin)
|
|
|
+
|
|
|
+// if err != nil {
|
|
|
+// log.Fatal(err)
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// func CopyDirectory(oldDir, newDir string) {
|
|
|
+// cmd := exec.Command("cp", "--recursive", oldDir, newDir)
|
|
|
+// cmd.Run()
|
|
|
+// }
|
|
|
+
|
|
|
+func CopyFile(source string, dest string) (err error) {
|
|
|
+ sourcefile, err := os.Open(source)
|
|
|
if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
+ return err
|
|
|
}
|
|
|
- defer fin.Close()
|
|
|
|
|
|
- fout, err := os.Create(dst)
|
|
|
+ defer sourcefile.Close()
|
|
|
+
|
|
|
+ destfile, err := os.Create(dest)
|
|
|
if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
+ return err
|
|
|
}
|
|
|
- defer fout.Close()
|
|
|
|
|
|
- _, err = io.Copy(fout, fin)
|
|
|
+ defer destfile.Close()
|
|
|
+
|
|
|
+ _, err = io.Copy(destfile, sourcefile)
|
|
|
+ if err == nil {
|
|
|
+ sourceinfo, err := os.Stat(source)
|
|
|
+ if err != nil {
|
|
|
+ err = os.Chmod(dest, sourceinfo.Mode())
|
|
|
+ }
|
|
|
|
|
|
- if err != nil {
|
|
|
- log.Fatal(err)
|
|
|
}
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
-func CopyDirectory(oldDir, newDir string) {
|
|
|
- cmd := exec.Command("cp", "--recursive", oldDir, newDir)
|
|
|
- cmd.Run()
|
|
|
+func CopyDir(source string, dest string) (err error) {
|
|
|
+ // get properties of source dir
|
|
|
+ sourceinfo, err := os.Stat(source)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // create dest dir
|
|
|
+ err = os.MkdirAll(dest, sourceinfo.Mode())
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ directory, _ := os.Open(source)
|
|
|
+ objects, err := directory.Readdir(-1)
|
|
|
+ for _, obj := range objects {
|
|
|
+ sourcefilepointer := source + "/" + obj.Name()
|
|
|
+ destinationfilepointer := dest + "/" + obj.Name()
|
|
|
+ if obj.IsDir() {
|
|
|
+ // create sub-directories - recursively
|
|
|
+ err = CopyDir(sourcefilepointer, destinationfilepointer)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // perform copy
|
|
|
+ err = CopyFile(sourcefilepointer, destinationfilepointer)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
}
|