fix symlink issue on windows for goctl (#1034)

* fix symlink issue on windows for goctl

* move readlink into separate file
master v1.2.0
Kevin Wan 3 years ago committed by GitHub
parent 9e2f07a842
commit 71c0288023
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,3 +1,4 @@
//go:build linux || darwin
// +build linux darwin // +build linux darwin
package proc package proc

@ -1,3 +1,4 @@
//go:build linux || darwin
// +build linux darwin // +build linux darwin
package proc package proc

@ -113,53 +113,6 @@ func FindProjectPath(loc string) (string, bool) {
return "", false 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 _, err := os.Lstat(name); err != nil {
return name, nil
}
// uncheck condition: ignore file path /var, maybe be temporary file path
if name == "/" || name == "/var" {
return name, 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) { func isLink(name string) (bool, error) {
fi, err := os.Lstat(name) fi, err := os.Lstat(name)
if err != nil { if err != nil {

@ -0,0 +1,8 @@
//go:build windows
// +build windows
package util
func ReadLink(name string) (string, error) {
return name, nil
}

@ -0,0 +1,56 @@
//go:build linux || darwin
// +build linux darwin
package util
import (
"os"
"path/filepath"
)
// 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 _, err := os.Lstat(name); err != nil {
return name, nil
}
// uncheck condition: ignore file path /var, maybe be temporary file path
if name == "/" || name == "/var" {
return name, 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
}
Loading…
Cancel
Save