summaryrefslogtreecommitdiff
path: root/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'helpers')
-rw-r--r--helpers/helpers.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/helpers/helpers.go b/helpers/helpers.go
index 1db691b..2b4763a 100644
--- a/helpers/helpers.go
+++ b/helpers/helpers.go
@@ -3,9 +3,12 @@ package helpers
import (
"fmt"
"strings"
+ "path/filepath"
"math/rand"
"time"
"strconv"
+ "os"
+ "io"
)
var r = rand.New(rand.NewSource(time.Now().UnixNano()))
@@ -42,3 +45,60 @@ func RandStr(n int) string {
}
return string(b)
}
+
+func CopyDir(src, dst string) error {
+ return filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ rel, err := filepath.Rel(src, path)
+ if err != nil {
+ return err
+ }
+
+ target := filepath.Join(dst, rel)
+
+ mode := info.Mode()
+
+ switch {
+ case mode&os.ModeSymlink != 0:
+ link, err := os.Readlink(path)
+ if err != nil {
+ return err
+ }
+ return os.Symlink(link, target)
+
+ case info.IsDir():
+ return os.MkdirAll(target, 0755)
+
+ default:
+ return CopyFile(path, target)
+ }
+ })
+}
+
+func CopyFile(src, dst string) error {
+ in, err := os.Open(src)
+ if err != nil {
+ return err
+ }
+ defer in.Close()
+
+ out, err := os.Create(dst)
+ if err != nil {
+ return err
+ }
+ defer out.Close()
+
+ _, err = io.Copy(out, in)
+ if err != nil {
+ return err
+ }
+
+ si, err := os.Stat(src)
+ if err != nil {
+ return err
+ }
+ return os.Chmod(dst, si.Mode())
+}