From 0973f9929dcfd65125ef942f935099b002e87683 Mon Sep 17 00:00:00 2001 From: Tillman Jex Date: Sun, 14 Apr 2024 21:34:22 +0200 Subject: [PATCH] allow notebook as hidden dir (#402) --- internal/core/note_index.go | 3 +- .../.hidden-dir/.hidden-file-in-hidden-dir | 1 + .../.walk-hidden/.hidden-file-at-root | 0 .../paths/testdata/.walk-hidden/Dir3/a.md | 0 .../util/paths/testdata/.walk-hidden/a.md | 0 .../util/paths/testdata/.walk-hidden/b.md | 0 .../testdata/.walk-hidden/dir1 a space/a.md | 0 .../testdata/.walk-hidden/dir1/.ignored.md | 0 .../testdata/.walk-hidden/dir1/.ignored/a.md | 0 .../paths/testdata/.walk-hidden/dir1/a.md | 0 .../paths/testdata/.walk-hidden/dir1/b.md | 0 .../testdata/.walk-hidden/dir1/dir1/a.md | 0 .../testdata/.walk-hidden/dir1/ignored.txt | 0 .../paths/testdata/.walk-hidden/dir2/a.md | 0 internal/util/paths/walk.go | 5 +-- internal/util/paths/walk_test.go | 32 ++++++++++++++++++- 16 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 internal/util/paths/testdata/.walk-hidden/.hidden-dir/.hidden-file-in-hidden-dir create mode 100644 internal/util/paths/testdata/.walk-hidden/.hidden-file-at-root create mode 100644 internal/util/paths/testdata/.walk-hidden/Dir3/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/b.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1 a space/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/.ignored.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/.ignored/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/b.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/dir1/a.md create mode 100644 internal/util/paths/testdata/.walk-hidden/dir1/ignored.txt create mode 100644 internal/util/paths/testdata/.walk-hidden/dir2/a.md diff --git a/internal/core/note_index.go b/internal/core/note_index.go index 6bdf95e..4406ca2 100644 --- a/internal/core/note_index.go +++ b/internal/core/note_index.go @@ -150,7 +150,8 @@ func (t *indexTask) execute(callback func(change paths.DiffChange)) (NoteIndexin return false, nil } - source := paths.Walk(t.path, t.logger, shouldIgnorePath) + notebookPath := &NotebookPath{Path: t.path} + source := paths.Walk(t.path, t.logger, notebookPath.Filename(), shouldIgnorePath) target, err := t.index.IndexedPaths() if err != nil { diff --git a/internal/util/paths/testdata/.walk-hidden/.hidden-dir/.hidden-file-in-hidden-dir b/internal/util/paths/testdata/.walk-hidden/.hidden-dir/.hidden-file-in-hidden-dir new file mode 100644 index 0000000..c9fa0fb --- /dev/null +++ b/internal/util/paths/testdata/.walk-hidden/.hidden-dir/.hidden-file-in-hidden-dir @@ -0,0 +1 @@ +this is a hidden file, and should not be indexed / walked. diff --git a/internal/util/paths/testdata/.walk-hidden/.hidden-file-at-root b/internal/util/paths/testdata/.walk-hidden/.hidden-file-at-root new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/Dir3/a.md b/internal/util/paths/testdata/.walk-hidden/Dir3/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/a.md b/internal/util/paths/testdata/.walk-hidden/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/b.md b/internal/util/paths/testdata/.walk-hidden/b.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1 a space/a.md b/internal/util/paths/testdata/.walk-hidden/dir1 a space/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/.ignored.md b/internal/util/paths/testdata/.walk-hidden/dir1/.ignored.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/.ignored/a.md b/internal/util/paths/testdata/.walk-hidden/dir1/.ignored/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/a.md b/internal/util/paths/testdata/.walk-hidden/dir1/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/b.md b/internal/util/paths/testdata/.walk-hidden/dir1/b.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/dir1/a.md b/internal/util/paths/testdata/.walk-hidden/dir1/dir1/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir1/ignored.txt b/internal/util/paths/testdata/.walk-hidden/dir1/ignored.txt new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/testdata/.walk-hidden/dir2/a.md b/internal/util/paths/testdata/.walk-hidden/dir2/a.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/util/paths/walk.go b/internal/util/paths/walk.go index 14d9f01..38829ee 100644 --- a/internal/util/paths/walk.go +++ b/internal/util/paths/walk.go @@ -10,7 +10,7 @@ import ( // Walk emits the metadata of each file stored in the directory if they pass // the given shouldIgnorePath closure. Hidden files and directories are ignored. -func Walk(basePath string, logger util.Logger, shouldIgnorePath func(string) (bool, error)) <-chan Metadata { +func Walk(basePath string, logger util.Logger, notebookRoot string, shouldIgnorePath func(string) (bool, error)) <-chan Metadata { c := make(chan Metadata, 50) go func() { defer close(c) @@ -22,9 +22,10 @@ func Walk(basePath string, logger util.Logger, shouldIgnorePath func(string) (bo filename := info.Name() isHidden := strings.HasPrefix(filename, ".") + isNotebookRoot := filename == notebookRoot if info.IsDir() { - if isHidden { + if isHidden && !isNotebookRoot { return filepath.SkipDir } diff --git a/internal/util/paths/walk_test.go b/internal/util/paths/walk_test.go index 24464fe..57f7a29 100644 --- a/internal/util/paths/walk_test.go +++ b/internal/util/paths/walk_test.go @@ -16,8 +16,38 @@ func TestWalk(t *testing.T) { return filepath.Ext(path) != ".md", nil } + notebookRoot := filepath.Base(path) actual := make([]string, 0) - for m := range Walk(path, &util.NullLogger, shouldIgnore) { + for m := range Walk(path, &util.NullLogger, notebookRoot, shouldIgnore) { + assert.NotNil(t, m.Modified) + actual = append(actual, m.Path) + } + + assert.Equal(t, actual, []string{ + "Dir3/a.md", + "a.md", + "b.md", + "dir1/a.md", + "dir1/b.md", + "dir1/dir1/a.md", + "dir1 a space/a.md", + "dir2/a.md", + }) +} + +// Walk should ignore all hidden files and dirs (prefixed with "."), with +// exception of the notebook's root dir; i.e the root dir is allowed to be +// hidden. +func TestWalkHidden(t *testing.T) { + var path = fixtures.Path(".walk-hidden") + + shouldIgnore := func(path string) (bool, error) { + return filepath.Ext(path) != ".md", nil + } + + notebookRoot := filepath.Base(path) + actual := make([]string, 0) + for m := range Walk(path, &util.NullLogger, notebookRoot, shouldIgnore) { assert.NotNil(t, m.Modified) actual = append(actual, m.Path) }