diff options
| author | Shulhan <ms@kilabit.info> | 2023-11-02 21:30:49 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2023-11-05 12:02:52 +0700 |
| commit | 3dbed6f1d8e797af40d8fe4eefe5c30bf89ffce7 (patch) | |
| tree | 3f0ab88c6b0d8be98a83ca39117584fdf9d9ec52 /lib/memfs/internal | |
| parent | d714934c3b42d9fba7c8751532f92cb61c23e1e2 (diff) | |
| download | pakakeh.go-3dbed6f1d8e797af40d8fe4eefe5c30bf89ffce7.tar.xz | |
lib/memfs: include empty directory
Even thought empty directory does not contains file, from the parent
node _it is_ part of their content.
Also, there is a use case where memfs use as virtual file system (VFS),
as a layer with file system, where user can view list of directory,
create a directory or file on the fly.
If we skip scanning empty directory, that directory will not be visible.
Diffstat (limited to 'lib/memfs/internal')
4 files changed, 84 insertions, 4 deletions
diff --git a/lib/memfs/internal/test/embed/embed_test.go b/lib/memfs/internal/test/embed/embed_test.go index f36f5638..01dd0133 100644 --- a/lib/memfs/internal/test/embed/embed_test.go +++ b/lib/memfs/internal/test/embed/embed_test.go @@ -101,12 +101,27 @@ func generate_testdata_exclude() *memfs.Node { node.SetModTimeUnix(1633792794, 467899662) node.SetName("exclude") node.SetSize(0) + node.AddChild(_memFS_getNode(memFS, "/exclude/dir", generate_testdata_exclude_dir)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.css", generate_testdata_exclude_index_link_css)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.html", generate_testdata_exclude_index_link_html)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.js", generate_testdata_exclude_index_link_js)) return node } +func generate_testdata_exclude_dir() *memfs.Node { + var node = &memfs.Node{ + SysPath: "testdata/exclude/dir", + Path: "/exclude/dir", + ContentType: "", + GenFuncName: "generate_testdata_exclude_dir", + } + node.SetMode(2147484096) + node.SetModTimeUnix(1629620045, 798024232) + node.SetName("dir") + node.SetSize(0) + return node +} + func generate_testdata_exclude_index_link_css() *memfs.Node { var node = &memfs.Node{ SysPath: "testdata/exclude/index-link.css", @@ -163,12 +178,27 @@ func generate_testdata_include() *memfs.Node { node.SetModTimeUnix(1629623653, 749800911) node.SetName("include") node.SetSize(0) + node.AddChild(_memFS_getNode(memFS, "/include/dir", generate_testdata_include_dir)) node.AddChild(_memFS_getNode(memFS, "/include/index.css", generate_testdata_include_index_css)) node.AddChild(_memFS_getNode(memFS, "/include/index.html", generate_testdata_include_index_html)) node.AddChild(_memFS_getNode(memFS, "/include/index.js", generate_testdata_include_index_js)) return node } +func generate_testdata_include_dir() *memfs.Node { + var node = &memfs.Node{ + SysPath: "testdata/include/dir", + Path: "/include/dir", + ContentType: "", + GenFuncName: "generate_testdata_include_dir", + } + node.SetMode(2147484096) + node.SetModTimeUnix(1564836597, 0) + node.SetName("dir") + node.SetSize(0) + return node +} + func generate_testdata_include_index_css() *memfs.Node { var node = &memfs.Node{ SysPath: "testdata/include/index.css", @@ -288,7 +318,7 @@ func init() { memFS = &memfs.MemFS{ PathNodes: memfs.NewPathNode(), Opts: &memfs.Options{ - Root: "testdata", + Root: "testdata", MaxFileSize: 5242880, Includes: []string{ }, @@ -297,7 +327,7 @@ func init() { `.*/node_save$`, }, Embed: memfs.EmbedOptions{ - CommentHeader: `// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info> + CommentHeader: `// SPDX-FileCopyrightText: 2022 Shulhan <ms@kilabit.info> // SPDX-License-Identifier: AGPL-3.0-or-later `, PackageName: "embed", @@ -319,6 +349,8 @@ func init() { _memFS_getNode(memFS, "/direct/add/file2", generate_testdata_direct_add_file2)) memFS.PathNodes.Set("/exclude", _memFS_getNode(memFS, "/exclude", generate_testdata_exclude)) + memFS.PathNodes.Set("/exclude/dir", + _memFS_getNode(memFS, "/exclude/dir", generate_testdata_exclude_dir)) memFS.PathNodes.Set("/exclude/index-link.css", _memFS_getNode(memFS, "/exclude/index-link.css", generate_testdata_exclude_index_link_css)) memFS.PathNodes.Set("/exclude/index-link.html", @@ -327,6 +359,8 @@ func init() { _memFS_getNode(memFS, "/exclude/index-link.js", generate_testdata_exclude_index_link_js)) memFS.PathNodes.Set("/include", _memFS_getNode(memFS, "/include", generate_testdata_include)) + memFS.PathNodes.Set("/include/dir", + _memFS_getNode(memFS, "/include/dir", generate_testdata_include_dir)) memFS.PathNodes.Set("/include/index.css", _memFS_getNode(memFS, "/include/index.css", generate_testdata_include_index_css)) memFS.PathNodes.Set("/include/index.html", @@ -343,4 +377,9 @@ func init() { _memFS_getNode(memFS, "/plain", generate_testdata_plain)) memFS.Root = memFS.PathNodes.Get("/") + + var err = memFS.Init() + if err != nil { + panic("memFS: " + err.Error()) + } } diff --git a/lib/memfs/internal/test/embed/memfs_embed_test.go b/lib/memfs/internal/test/embed/memfs_embed_test.go index 5cd447d4..a7a5d789 100644 --- a/lib/memfs/internal/test/embed/memfs_embed_test.go +++ b/lib/memfs/internal/test/embed/memfs_embed_test.go @@ -101,6 +101,7 @@ func TestNode_Readdir(t *testing.T) { }, { path: "/exclude", exp: []string{ + "dir", "index-link.css", "index-link.html", "index-link.js", @@ -108,6 +109,7 @@ func TestNode_Readdir(t *testing.T) { }, { path: "/include", exp: []string{ + "dir", "index.css", "index.html", "index.js", diff --git a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go index dcdc562b..05bb83ed 100644 --- a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go +++ b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go @@ -93,12 +93,26 @@ func generate_testdata_exclude() *memfs.Node { node.SetMode(2147484141) node.SetName("exclude") node.SetSize(0) + node.AddChild(_memFS_getNode(memFS, "/exclude/dir", generate_testdata_exclude_dir)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.css", generate_testdata_exclude_index_link_css)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.html", generate_testdata_exclude_index_link_html)) node.AddChild(_memFS_getNode(memFS, "/exclude/index-link.js", generate_testdata_exclude_index_link_js)) return node } +func generate_testdata_exclude_dir() *memfs.Node { + var node = &memfs.Node{ + SysPath: "testdata/exclude/dir", + Path: "/exclude/dir", + ContentType: "", + GenFuncName: "generate_testdata_exclude_dir", + } + node.SetMode(2147484096) + node.SetName("dir") + node.SetSize(0) + return node +} + func generate_testdata_exclude_index_link_css() *memfs.Node { var node = &memfs.Node{ SysPath: "testdata/exclude/index-link.css", @@ -151,12 +165,26 @@ func generate_testdata_include() *memfs.Node { node.SetMode(2147484141) node.SetName("include") node.SetSize(0) + node.AddChild(_memFS_getNode(memFS, "/include/dir", generate_testdata_include_dir)) node.AddChild(_memFS_getNode(memFS, "/include/index.css", generate_testdata_include_index_css)) node.AddChild(_memFS_getNode(memFS, "/include/index.html", generate_testdata_include_index_html)) node.AddChild(_memFS_getNode(memFS, "/include/index.js", generate_testdata_include_index_js)) return node } +func generate_testdata_include_dir() *memfs.Node { + var node = &memfs.Node{ + SysPath: "testdata/include/dir", + Path: "/include/dir", + ContentType: "", + GenFuncName: "generate_testdata_include_dir", + } + node.SetMode(2147484096) + node.SetName("dir") + node.SetSize(0) + return node +} + func generate_testdata_include_index_css() *memfs.Node { var node = &memfs.Node{ SysPath: "testdata/include/index.css", @@ -269,7 +297,7 @@ func init() { memFS = &memfs.MemFS{ PathNodes: memfs.NewPathNode(), Opts: &memfs.Options{ - Root: "testdata", + Root: "testdata", MaxFileSize: 5242880, Includes: []string{ }, @@ -278,7 +306,7 @@ func init() { `.*/node_save$`, }, Embed: memfs.EmbedOptions{ - CommentHeader: ``, + CommentHeader: ``, PackageName: "embed", VarName: "memFS", GoFileName: "./internal/test/embed_disable_modtime/embed_test.go", @@ -298,6 +326,8 @@ func init() { _memFS_getNode(memFS, "/direct/add/file2", generate_testdata_direct_add_file2)) memFS.PathNodes.Set("/exclude", _memFS_getNode(memFS, "/exclude", generate_testdata_exclude)) + memFS.PathNodes.Set("/exclude/dir", + _memFS_getNode(memFS, "/exclude/dir", generate_testdata_exclude_dir)) memFS.PathNodes.Set("/exclude/index-link.css", _memFS_getNode(memFS, "/exclude/index-link.css", generate_testdata_exclude_index_link_css)) memFS.PathNodes.Set("/exclude/index-link.html", @@ -306,6 +336,8 @@ func init() { _memFS_getNode(memFS, "/exclude/index-link.js", generate_testdata_exclude_index_link_js)) memFS.PathNodes.Set("/include", _memFS_getNode(memFS, "/include", generate_testdata_include)) + memFS.PathNodes.Set("/include/dir", + _memFS_getNode(memFS, "/include/dir", generate_testdata_include_dir)) memFS.PathNodes.Set("/include/index.css", _memFS_getNode(memFS, "/include/index.css", generate_testdata_include_index_css)) memFS.PathNodes.Set("/include/index.html", @@ -322,4 +354,9 @@ func init() { _memFS_getNode(memFS, "/plain", generate_testdata_plain)) memFS.Root = memFS.PathNodes.Get("/") + + var err = memFS.Init() + if err != nil { + panic("memFS: " + err.Error()) + } } diff --git a/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go index 5cd447d4..a7a5d789 100644 --- a/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go +++ b/lib/memfs/internal/test/embed_disable_modtime/memfs_embed_test.go @@ -101,6 +101,7 @@ func TestNode_Readdir(t *testing.T) { }, { path: "/exclude", exp: []string{ + "dir", "index-link.css", "index-link.html", "index-link.js", @@ -108,6 +109,7 @@ func TestNode_Readdir(t *testing.T) { }, { path: "/include", exp: []string{ + "dir", "index.css", "index.html", "index.js", |
