diff options
| author | 2023-04-28 01:36:44 +0800 | |
|---|---|---|
| committer | 2023-04-28 01:36:44 +0800 | |
| commit | dd84b9d64fb98746a230cd24233ff50a562c39c9 (patch) | |
| tree | b583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/internal/turbopath/find_up.go | |
| parent | 0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff) | |
| download | HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip | |
Diffstat (limited to 'cli/internal/turbopath/find_up.go')
| -rw-r--r-- | cli/internal/turbopath/find_up.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/cli/internal/turbopath/find_up.go b/cli/internal/turbopath/find_up.go new file mode 100644 index 0000000..bf7c39c --- /dev/null +++ b/cli/internal/turbopath/find_up.go @@ -0,0 +1,50 @@ +package turbopath + +import ( + "os" + "path/filepath" +) + +func hasFile(name, dir string) (bool, error) { + files, err := os.ReadDir(dir) + + if err != nil { + return false, err + } + + for _, f := range files { + if name == f.Name() { + return true, nil + } + } + + return false, nil +} + +func findupFrom(name, dir string) (string, error) { + for { + found, err := hasFile(name, dir) + + if err != nil { + return "", err + } + + if found { + return filepath.Join(dir, name), nil + } + + parent := filepath.Dir(dir) + + if parent == dir { + return "", nil + } + + dir = parent + } +} + +// FindupFrom Recursively finds a file by walking up parents in the file tree +// starting from a specific directory. +func FindupFrom(name, dir string) (string, error) { + return findupFrom(name, dir) +} |
