Improve memory medium metadata
Some checks are pending
CI / test (push) Waiting to run
CI / auto-fix (push) Waiting to run
CI / auto-merge (push) Waiting to run

This commit is contained in:
Virgil 2026-04-03 05:13:09 +00:00
parent 3c8c16320a
commit 3efb43aaf7
2 changed files with 18 additions and 4 deletions

13
io.go
View file

@ -374,6 +374,7 @@ func (medium *MemoryMedium) Open(path string) (fs.File, error) {
name: core.PathBase(path),
content: []byte(content),
mode: medium.fileMode(path),
modTime: medium.modificationTime(path),
}, nil
}
@ -410,10 +411,11 @@ type MemoryFile struct {
content []byte
offset int64
mode fs.FileMode
modTime time.Time
}
func (file *MemoryFile) Stat() (fs.FileInfo, error) {
return NewFileInfo(file.name, int64(len(file.content)), file.mode, time.Time{}, false), nil
return NewFileInfo(file.name, int64(len(file.content)), file.mode, file.modTime, false), nil
}
func (file *MemoryFile) Read(buffer []byte) (int, error) {
@ -457,6 +459,13 @@ func (medium *MemoryMedium) fileMode(path string) fs.FileMode {
return 0644
}
func (medium *MemoryMedium) modificationTime(path string) time.Time {
if modTime, ok := medium.modificationTimes[path]; ok {
return modTime
}
return time.Time{}
}
func (medium *MemoryMedium) List(path string) ([]fs.DirEntry, error) {
if _, ok := medium.directories[path]; !ok {
hasChildren := false
@ -518,7 +527,7 @@ func (medium *MemoryMedium) List(path string) ([]fs.DirEntry, error) {
rest,
false,
medium.fileMode(filePath),
NewFileInfo(rest, int64(len(content)), medium.fileMode(filePath), time.Time{}, false),
NewFileInfo(rest, int64(len(content)), medium.fileMode(filePath), medium.modificationTime(filePath), false),
))
}
}

View file

@ -234,6 +234,9 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) {
require.NoError(t, memoryMedium.EnsureDir("dir"))
require.NoError(t, memoryMedium.Write("dir/file.txt", "alpha"))
statInfo, err := memoryMedium.Stat("dir/file.txt")
require.NoError(t, err)
file, err := memoryMedium.Open("dir/file.txt")
require.NoError(t, err)
@ -242,7 +245,7 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) {
assert.Equal(t, "file.txt", info.Name())
assert.Equal(t, int64(5), info.Size())
assert.Equal(t, fs.FileMode(0644), info.Mode())
assert.True(t, info.ModTime().IsZero())
assert.Equal(t, statInfo.ModTime(), info.ModTime())
assert.False(t, info.IsDir())
assert.Nil(t, info.Sys())
@ -263,6 +266,7 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) {
assert.Equal(t, "file.txt", entryInfo.Name())
assert.Equal(t, int64(5), entryInfo.Size())
assert.Equal(t, fs.FileMode(0644), entryInfo.Mode())
assert.Equal(t, statInfo.ModTime(), entryInfo.ModTime())
writer, err := memoryMedium.Create("created.txt")
require.NoError(t, err)
@ -290,9 +294,10 @@ func TestMemoryMedium_StreamAndFSHelpers_Good(t *testing.T) {
require.NoError(t, writeStream.Close())
assert.Equal(t, "stream output", memoryMedium.fileContents["streamed.txt"])
statInfo, err := memoryMedium.Stat("streamed.txt")
statInfo, err = memoryMedium.Stat("streamed.txt")
require.NoError(t, err)
assert.Equal(t, fs.FileMode(0644), statInfo.Mode())
assert.False(t, statInfo.ModTime().IsZero())
}
func TestIO_Read_Good(t *testing.T) {