From 45a297a8e526094e8fce6e2c5c0fd89b381d1765 Mon Sep 17 00:00:00 2001 From: ewy Date: Tue, 14 Apr 2026 16:37:17 +0200 Subject: i have to commit at some point! --- crawl/crawl.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 crawl/crawl.go (limited to 'crawl/crawl.go') 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 +} -- cgit v1.3