summaryrefslogtreecommitdiff
path: root/markdown
diff options
context:
space:
mode:
authoralex emery <[email protected]>2024-11-03 15:35:07 +0000
committeralex emery <[email protected]>2024-11-03 16:03:43 +0000
commitb28b124f1bc62a737bc4a11d575ff7638e65ee66 (patch)
tree19f78fa1ff45f158798e1922fb74fc8809d7b7a2 /markdown
parent508527f52de524a4fd174d386808e314b4138b11 (diff)
use obsidian symlink to posts
Diffstat (limited to 'markdown')
-rw-r--r--markdown/markdown.go40
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