diff options
| author | ewy <ewy0@protonmail.com> | 2026-04-14 16:37:17 +0200 |
|---|---|---|
| committer | ewy <ewy0@protonmail.com> | 2026-04-14 16:37:17 +0200 |
| commit | 45a297a8e526094e8fce6e2c5c0fd89b381d1765 (patch) | |
| tree | 852ebc3a0112c94dc9726d0b27ab057bf6383660 /crawl/crawl.go | |
i have to commit at some point!
Diffstat (limited to 'crawl/crawl.go')
| -rw-r--r-- | crawl/crawl.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/crawl/crawl.go b/crawl/crawl.go new file mode 100644 index 0000000..dac6b19 --- /dev/null +++ b/crawl/crawl.go @@ -0,0 +1,54 @@ +package crawl + +import ( + "path" + "path/filepath" + "slices" + "strings" +) + +func Evaluated(loc string) (string, error) { + return filepath.EvalSymlinks(loc) +} + +func RichLocations(origin string) []string { + locs := Locations(origin) + + eval, err := Evaluated(origin) + if err == nil && eval != origin { + i := 0 + evaledLocations := Locations(eval) + var result []string + for i < len(locs) && i < len(evaledLocations) { + result = append(result, evaledLocations[i], locs[i]) + } + result = slices.Compact(result) + return result + } + return locs +} + +func Locations(origin string) []string { + origin = path.Clean(origin) + var locs = []string{ + origin, + } + for { + previous := locs[len(locs)-1] + parent := ParentDir(previous) + if previous == parent { + break + } + locs = append(locs, parent) + } + return locs +} + +func ParentDir(origin string) string { + trimmedOrigin := strings.TrimSuffix(origin, "/") + dir, _ := path.Split(trimmedOrigin) + if dir == "" { + return origin + } + return dir +} |
