47 lines
813 B
Go
47 lines
813 B
Go
package complete
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// fixPathForm changes a file name to a relative name
|
|
func fixPathForm(last string, file string) string {
|
|
// get wording directory for relative name
|
|
workDir, err := os.Getwd()
|
|
if err != nil {
|
|
return file
|
|
}
|
|
|
|
abs, err := filepath.Abs(file)
|
|
if err != nil {
|
|
return file
|
|
}
|
|
|
|
// if last is absolute, return path as absolute
|
|
if filepath.IsAbs(last) {
|
|
return fixDirPath(abs)
|
|
}
|
|
|
|
rel, err := filepath.Rel(workDir, abs)
|
|
if err != nil {
|
|
return file
|
|
}
|
|
|
|
// fix ./ prefix of path
|
|
if rel != "." && strings.HasPrefix(last, ".") {
|
|
rel = "./" + rel
|
|
}
|
|
|
|
return fixDirPath(rel)
|
|
}
|
|
|
|
func fixDirPath(path string) string {
|
|
info, err := os.Stat(path)
|
|
if err == nil && info.IsDir() && !strings.HasSuffix(path, "/") {
|
|
path += "/"
|
|
}
|
|
return path
|
|
}
|