mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 22:50:13 +01:00
🎨 macOS 端对工作空间放置在 iCloud 路径下做检查 https://github.com/siyuan-note/siyuan/issues/7747
This commit is contained in:
parent
932ebc1ad9
commit
4d51ca3ad1
2 changed files with 53 additions and 21 deletions
|
|
@ -231,3 +231,55 @@ func CeilSize(size int64) int64 {
|
|||
func IsReservedFilename(baseName string) bool {
|
||||
return "assets" == baseName || "templates" == baseName || "widgets" == baseName || "emojis" == baseName || ".siyuan" == baseName || strings.HasPrefix(baseName, ".")
|
||||
}
|
||||
|
||||
func WalkWithSymlinks(root string, fn filepath.WalkFunc) error {
|
||||
// 感谢 https://github.com/edwardrf/symwalk/blob/main/symwalk.go
|
||||
|
||||
rr, err := filepath.EvalSymlinks(root) // Find real base if there is any symlinks in the path
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
visitedDirs := make(map[string]struct{})
|
||||
return filepath.Walk(rr, getWalkFn(visitedDirs, fn))
|
||||
}
|
||||
|
||||
func getWalkFn(visitedDirs map[string]struct{}, fn filepath.WalkFunc) filepath.WalkFunc {
|
||||
return func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return fn(path, info, err)
|
||||
}
|
||||
|
||||
if info.IsDir() {
|
||||
if _, ok := visitedDirs[path]; ok {
|
||||
return filepath.SkipDir
|
||||
}
|
||||
visitedDirs[path] = struct{}{}
|
||||
}
|
||||
|
||||
if err := fn(path, info, err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if info.Mode()&os.ModeSymlink == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// path is a symlink
|
||||
rp, err := filepath.EvalSymlinks(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ri, err := os.Stat(rp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ri.IsDir() {
|
||||
return filepath.Walk(rp, getWalkFn(visitedDirs, fn))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue