From 7c7fd180d8b582cf8613e3039a7f3eae4735f93d Mon Sep 17 00:00:00 2001 From: Craig Weber Date: Tue, 14 Nov 2023 14:45:24 -0600 Subject: [PATCH] `Memory.ReadDir()` should return an error when path isn't found. Presently, it returns an empty list of files and a `nil` error value. This PR aims to fix #37 --- memfs/memory.go | 5 ++++- memfs/memory_test.go | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/memfs/memory.go b/memfs/memory.go index dab7396..2e17a3c 100644 --- a/memfs/memory.go +++ b/memfs/memory.go @@ -9,6 +9,7 @@ import ( "path/filepath" "sort" "strings" + "syscall" "time" "github.com/go-git/go-billy/v5" @@ -25,7 +26,7 @@ type Memory struct { tempCount int } -//New returns a new Memory filesystem. +// New returns a new Memory filesystem. func New() billy.Filesystem { fs := &Memory{s: newStorage()} return chroot.New(fs, string(separator)) @@ -133,6 +134,8 @@ func (fs *Memory) ReadDir(path string) ([]os.FileInfo, error) { if target, isLink := fs.resolveLink(path, f); isLink { return fs.ReadDir(target) } + } else { + return nil, &os.PathError{Op: "open", Path: path, Err: syscall.ENOENT} } var entries []os.FileInfo diff --git a/memfs/memory_test.go b/memfs/memory_test.go index b23f7ae..3b5f609 100644 --- a/memfs/memory_test.go +++ b/memfs/memory_test.go @@ -85,6 +85,12 @@ func (s *MemorySuite) TestOrder(c *C) { } } +func (s *MemorySuite) TestNotFound(c *C) { + files, err := s.FS.ReadDir("asdf") + c.Assert(files, HasLen, 0) + c.Assert(err, ErrorMatches, "open /asdf: no such file or directory") +} + func (s *MemorySuite) TestTruncateAppend(c *C) { err := util.WriteFile(s.FS, "truncate_append", []byte("file-content"), 0666) c.Assert(err, IsNil)