Skip to content

Commit 7d8215e

Browse files
authored
Merge pull request #3 from erikwilson/erik/fix/sort-readdir
fix: sort ReadDir result
2 parents 9a447c8 + 5eebe2b commit 7d8215e

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

merge.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"io/fs"
66
"os"
7+
"sort"
78
)
89

910
// Merge filesystems
@@ -119,6 +120,9 @@ func (mfs mergedFS) ReadDir(name string) ([]fs.DirEntry, error) {
119120
for _, value := range dirsMap {
120121
dirs = append(dirs, value)
121122
}
123+
sort.Slice(dirs, func(i, j int) bool {
124+
return dirs[i].Name() < dirs[j].Name()
125+
})
122126

123127
return dirs, nil
124128
}

merge_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,33 @@ func TestMergedOpen(t *testing.T) {
104104

105105
require.NoError(t, file.Close())
106106
}
107+
108+
func TestReadDirIsSorted(t *testing.T) {
109+
fs1 := fstest.MapFS{
110+
"dir": &fstest.MapFile{Mode: fs.ModeDir},
111+
"dir/b": &fstest.MapFile{Mode: fs.ModeDir},
112+
"dir/a": &fstest.MapFile{Mode: fs.ModeDir},
113+
}
114+
fs2 := fstest.MapFS{
115+
"dir": &fstest.MapFile{Mode: fs.ModeDir},
116+
"dir/d": &fstest.MapFile{Mode: fs.ModeDir},
117+
"dir/c": &fstest.MapFile{Mode: fs.ModeDir},
118+
}
119+
fs3 := fstest.MapFS{
120+
"dir": &fstest.MapFile{Mode: fs.ModeDir},
121+
"dir/3": &fstest.MapFile{Mode: fs.ModeDir},
122+
"dir/2": &fstest.MapFile{Mode: fs.ModeDir},
123+
"dir/1": &fstest.MapFile{Mode: fs.ModeDir},
124+
}
125+
126+
mfs := mergefs.Merge(fs1, fs2, fs3)
127+
entries, err := fs.ReadDir(mfs, "dir")
128+
require.NoError(t, err)
129+
130+
names := make([]string, len(entries))
131+
for i, e := range entries {
132+
names[i] = e.Name()
133+
}
134+
135+
require.Equal(t, []string{"1", "2", "3", "a", "b", "c", "d"}, names)
136+
}

0 commit comments

Comments
 (0)