Files
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

86 lines
1.4 KiB
Go

package utils
import (
"io"
"os"
"path/filepath"
)
// CopyPath copies a file or directory from src to dest
func CopyPath(src, dest string) error {
info, err := os.Stat(src)
if err != nil {
return err
}
if info.IsDir() {
return copyDir(src, dest)
}
return CopyFile(src, dest)
}
// CopyFile copies a single file from src to dest
func CopyFile(src, dest string) error {
srcFile, err := os.Open(src)
if err != nil {
return err
}
defer srcFile.Close()
if err := os.MkdirAll(filepath.Dir(dest), 0755); err != nil {
return err
}
destFile, err := os.Create(dest)
if err != nil {
return err
}
defer destFile.Close()
if _, err := io.Copy(destFile, srcFile); err != nil {
return err
}
info, err := os.Stat(src)
if err == nil {
os.Chmod(dest, info.Mode())
}
return nil
}
func copyDir(src, dest string) error {
info, err := os.Stat(src)
if err != nil {
return err
}
if err := os.MkdirAll(dest, info.Mode()); err != nil {
return err
}
entries, err := os.ReadDir(src)
if err != nil {
return err
}
for _, entry := range entries {
srcPath := filepath.Join(src, entry.Name())
destPath := filepath.Join(dest, entry.Name())
if err := CopyPath(srcPath, destPath); err != nil {
return err
}
}
return nil
}
// IsInDocker 判断程序是否运行在 Docker 容器中
func IsInDocker() bool {
if _, err := os.Stat("/.dockerenv"); err == nil {
return true
}
return false
}