From 22359129afeef78e0fcd56e62586819c06950846 Mon Sep 17 00:00:00 2001 From: huker667 Date: Wed, 15 Jul 2026 14:33:08 +0300 Subject: init commit da --- helpers/helpers.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'helpers/helpers.go') 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()) +} -- cgit v1.3.1