diff options
| author | alex emery <[email protected]> | 2024-11-03 15:35:07 +0000 |
|---|---|---|
| committer | alex emery <[email protected]> | 2024-11-03 16:03:43 +0000 |
| commit | b28b124f1bc62a737bc4a11d575ff7638e65ee66 (patch) | |
| tree | 19f78fa1ff45f158798e1922fb74fc8809d7b7a2 /markdown/markdown.go | |
| parent | 508527f52de524a4fd174d386808e314b4138b11 (diff) | |
use obsidian symlink to posts
Diffstat (limited to 'markdown/markdown.go')
| -rw-r--r-- | markdown/markdown.go | 40 |
1 files changed, 37 insertions, 3 deletions
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 |
