feat: add repo sync white-path #56

This commit is contained in:
engigu
2026-03-16 10:50:07 +08:00
parent f1ca4b7a0b
commit 07f04af841
6 changed files with 243 additions and 4 deletions
+77
View File
@@ -0,0 +1,77 @@
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
}