diff options
| author | huker667 <huker@tuta.io> | 2026-07-15 14:33:08 +0300 |
|---|---|---|
| committer | huker667 <huker@tuta.io> | 2026-07-15 14:33:08 +0300 |
| commit | 22359129afeef78e0fcd56e62586819c06950846 (patch) | |
| tree | ac83fef674adb3e5527b9e5ee53246d43fb8be1b /helpers | |
| parent | d64b4f39839e112d096b9809fdb35e873a1b40fd (diff) | |
| download | qulay-22359129afeef78e0fcd56e62586819c06950846.tar.gz qulay-22359129afeef78e0fcd56e62586819c06950846.tar.bz2 qulay-22359129afeef78e0fcd56e62586819c06950846.zip | |
init commit da
Diffstat (limited to 'helpers')
| -rw-r--r-- | helpers/helpers.go | 60 |
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()) +} |