mirror of https://github.com/databricks/cli.git
35 lines
671 B
Go
35 lines
671 B
Go
package folders
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// FindDirWithLeaf returns the first directory that holds `leaf`,
|
|
// traversing up to the root of the filesystem, starting at `dir`.
|
|
func FindDirWithLeaf(dir string, leaf string) (string, error) {
|
|
for {
|
|
_, err := os.Stat(filepath.Join(dir, leaf))
|
|
|
|
// No error means we found the leaf in dir.
|
|
if err == nil {
|
|
return dir, nil
|
|
}
|
|
|
|
// ErrNotExist means we continue traversal up the tree.
|
|
if errors.Is(err, os.ErrNotExist) {
|
|
next := filepath.Dir(dir)
|
|
if dir == next {
|
|
// Return if we cannot continue traversal.
|
|
return "", err
|
|
}
|
|
|
|
dir = next
|
|
continue
|
|
}
|
|
|
|
return "", err
|
|
}
|
|
}
|