From b28b124f1bc62a737bc4a11d575ff7638e65ee66 Mon Sep 17 00:00:00 2001 From: alex emery Date: Sun, 3 Nov 2024 15:35:07 +0000 Subject: use obsidian symlink to posts --- markdown/markdown.go | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'markdown') diff --git a/markdown/markdown.go b/markdown/markdown.go index 83f94b7..e1f8aa7 100644 --- a/markdown/markdown.go +++ b/markdown/markdown.go @@ -37,17 +37,51 @@ func ParseContents(contentPath string) ([]Content, error) { return res, nil } +func walk(filename string, linkDirname string, walkFn filepath.WalkFunc) error { + symWalkFunc := func(path string, info os.FileInfo, err error) error { + + if fname, err := filepath.Rel(filename, path); err == nil { + path = filepath.Join(linkDirname, fname) + } else { + return err + } + + if err == nil && info.Mode()&os.ModeSymlink == os.ModeSymlink { + finalPath, err := filepath.EvalSymlinks(path) + if err != nil { + return err + } + info, err := os.Lstat(finalPath) + if err != nil { + return walkFn(path, info, err) + } + if info.IsDir() { + return walk(finalPath, path, walkFn) + } + } + + return walkFn(path, info, err) + } + return filepath.Walk(filename, symWalkFunc) +} + +// Walk extends filepath.Walk to also follow symlinks +func Walk(path string, walkFn filepath.WalkFunc) error { + return walk(path, path, walkFn) +} + // glob returns relative file paths that match the extension func glob(dir string, ext string) ([]string, error) { files := []string{} - err := filepath.WalkDir(dir, func(p string, d fs.DirEntry, err error) error { - if filepath.Ext(p) == ext { + err := Walk(dir, func(path string, info fs.FileInfo, err error) error { + if filepath.Ext(path) == ext { // just diff - relPath, _ := filepath.Rel(dir, p) + relPath, _ := filepath.Rel(dir, path) files = append(files, relPath) } return nil + }) return files, err -- cgit v1.2.3