Fix filepath (#990)

This commit is contained in:
anqiansong
2021-09-04 08:15:22 +08:00
committed by GitHub
parent c26c187e11
commit 2125977281
4 changed files with 112 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package util
import (
"fmt"
"io/fs"
"os"
"path"
"path/filepath"
@@ -112,3 +113,54 @@ func FindProjectPath(loc string) (string, bool) {
return "", false
}
// ReadLink returns the destination of the named symbolic link recursively.
func ReadLink(name string) (string, error) {
name, err := filepath.Abs(name)
if err != nil {
return "", err
}
if name == "/" {
return "/", nil
}
isLink, err := isLink(name)
if err != nil {
return "", err
}
if !isLink {
dir, base := filepath.Split(name)
dir = filepath.Clean(dir)
dir, err := ReadLink(dir)
if err != nil {
return "", err
}
return filepath.Join(dir, base), nil
}
link, err := os.Readlink(name)
if err != nil {
return "", err
}
dir, base := filepath.Split(link)
dir = filepath.Dir(dir)
dir, err = ReadLink(dir)
if err != nil {
return "", err
}
return filepath.Join(dir, base), nil
}
func isLink(name string) (bool, error) {
fi, err := os.Lstat(name)
if err != nil {
return false, err
}
return fi.Mode()&fs.ModeSymlink != 0, nil
}