From 2929733f78033231a61522470c5135e103dabe6a Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Fri, 24 Sep 2021 01:24:36 +0200 Subject: [PATCH] Index: Ignore files and folders starting with @ #1543 Synology stores hidden sidecar / thumbnail files in @eaDir. --- pkg/fs/ignore.go | 2 +- pkg/fs/name.go | 18 ++++++++++++++++++ pkg/fs/name_test.go | 25 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/pkg/fs/ignore.go b/pkg/fs/ignore.go index 2683a1266..fa721728f 100644 --- a/pkg/fs/ignore.go +++ b/pkg/fs/ignore.go @@ -156,7 +156,7 @@ func (l *IgnoreList) Ignore(fileName string) bool { } } - if l.ignoreHidden && strings.HasPrefix(filepath.Base(fileName), ".") { + if l.ignoreHidden && FileNameHidden(fileName) { l.hiddenFiles = append(l.hiddenFiles, fileName) return true } diff --git a/pkg/fs/name.go b/pkg/fs/name.go index 8c7274a9f..c6acb96ab 100644 --- a/pkg/fs/name.go +++ b/pkg/fs/name.go @@ -53,3 +53,21 @@ func RelName(fileName, dir string) string { return fileName } + +// FileNameHidden tests is a file name belongs to a hidden file. +func FileNameHidden(name string) bool { + if name == "" { + return false + } + + name = filepath.Base(name) + + prefix := name[0:1] + + switch prefix { + case ".", "@": + return true + default: + return false + } +} diff --git a/pkg/fs/name_test.go b/pkg/fs/name_test.go index 31a6b1c0f..b33147244 100644 --- a/pkg/fs/name_test.go +++ b/pkg/fs/name_test.go @@ -67,3 +67,28 @@ func TestFileName(t *testing.T) { assert.Equal(t, "testdata/FOO.XMP.jpeg", result) }) } + +func TestFileNameHidden(t *testing.T) { + t.Run("AtPrefix", func(t *testing.T) { + assert.True(t, FileNameHidden("/some/path/@eaDir")) + }) + t.Run("DotPrefix", func(t *testing.T) { + assert.True(t, FileNameHidden("/some/.folder")) + }) + t.Run("HasAts", func(t *testing.T) { + assert.False(t, FileNameHidden("/some/path/ea@Dir")) + assert.False(t, FileNameHidden("/some/@path/ea@Dir")) + assert.False(t, FileNameHidden("@/eaDir")) + }) + t.Run("HasDots", func(t *testing.T) { + assert.False(t, FileNameHidden("/some/image.jpg.")) + assert.False(t, FileNameHidden("./.some/foo")) + }) + t.Run("False", func(t *testing.T) { + assert.False(t, FileNameHidden("/some/path/folder")) + }) + t.Run("Empty", func(t *testing.T) { + assert.False(t, FileNameHidden("")) + }) + +}