github.com/tilt-dev/wat@v0.0.2-0.20180626175338-9349b638e250/os/ospath/ospath.go (about) 1 package ospath 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/windmilleng/wat/data/pathutil" 8 ) 9 10 func Child(dir string, file string) (string, bool) { 11 return pathutil.Child(theOsPathUtil, dir, file) 12 } 13 14 func RealChild(dir string, file string) (string, bool, error) { 15 realDir, err := RealAbs(dir) 16 if err != nil { 17 return "", false, err 18 } 19 realFile, err := RealAbs(file) 20 if err != nil { 21 return "", false, err 22 } 23 24 rel, isChild := Child(realDir, realFile) 25 return rel, isChild, nil 26 } 27 28 // Returns the absolute version of this path, resolving all symlinks. 29 func RealAbs(path string) (string, error) { 30 // Make the path absolute first, so that we find any symlink parents. 31 absPath, err := filepath.Abs(path) 32 if err != nil { 33 return "", err 34 } 35 36 // Resolve the symlinks. 37 realPath, err := filepath.EvalSymlinks(absPath) 38 if err != nil { 39 return "", err 40 } 41 42 // Double-check we're still absolute. 43 return filepath.Abs(realPath) 44 } 45 46 // Like os.Getwd, but with all symlinks resolved. 47 func Realwd() (string, error) { 48 path, err := os.Getwd() 49 if err != nil { 50 return "", err 51 } 52 return RealAbs(path) 53 } 54 55 func IsDir(path string) bool { 56 f, err := os.Stat(path) 57 if err != nil { 58 return false 59 } 60 61 return f.Mode().IsDir() 62 } 63 64 type osPathUtil struct{} 65 66 func (p osPathUtil) Base(path string) string { return filepath.Base(path) } 67 func (p osPathUtil) Dir(path string) string { return filepath.Dir(path) } 68 func (p osPathUtil) Join(a, b string) string { return filepath.Join(a, b) } 69 func (p osPathUtil) Match(pattern, path string) (bool, error) { return filepath.Match(pattern, path) } 70 func (p osPathUtil) Separator() rune { return filepath.Separator } 71 72 var theOsPathUtil = osPathUtil{}