--- a/vendor/github.com/spf13/afero/iofs.go Tue Aug 23 22:33:28 2022 +0200
+++ b/vendor/github.com/spf13/afero/iofs.go Tue Aug 23 22:39:43 2022 +0200
@@ -1,3 +1,4 @@
+//go:build go1.16
// +build go1.16
package afero
@@ -7,7 +8,10 @@
"io/fs"
"os"
"path"
+ "sort"
"time"
+
+ "github.com/spf13/afero/internal/common"
)
// IOFS adopts afero.Fs to stdlib io/fs.FS
@@ -66,14 +70,31 @@
}
func (iofs IOFS) ReadDir(name string) ([]fs.DirEntry, error) {
- items, err := ReadDir(iofs.Fs, name)
+ f, err := iofs.Fs.Open(name)
if err != nil {
return nil, iofs.wrapError("readdir", name, err)
}
+ defer f.Close()
+
+ if rdf, ok := f.(fs.ReadDirFile); ok {
+ items, err := rdf.ReadDir(-1)
+ if err != nil {
+ return nil, iofs.wrapError("readdir", name, err)
+ }
+ sort.Slice(items, func(i, j int) bool { return items[i].Name() < items[j].Name() })
+ return items, nil
+ }
+
+ items, err := f.Readdir(-1)
+ if err != nil {
+ return nil, iofs.wrapError("readdir", name, err)
+ }
+ sort.Sort(byName(items))
+
ret := make([]fs.DirEntry, len(items))
for i := range items {
- ret[i] = dirEntry{items[i]}
+ ret[i] = common.FileInfoDirEntry{FileInfo: items[i]}
}
return ret, nil
@@ -108,17 +129,6 @@
}
}
-// dirEntry provides adapter from os.FileInfo to fs.DirEntry
-type dirEntry struct {
- fs.FileInfo
-}
-
-var _ fs.DirEntry = dirEntry{}
-
-func (d dirEntry) Type() fs.FileMode { return d.FileInfo.Mode().Type() }
-
-func (d dirEntry) Info() (fs.FileInfo, error) { return d.FileInfo, nil }
-
// readDirFile provides adapter from afero.File to fs.ReadDirFile needed for correct Open
type readDirFile struct {
File
@@ -134,7 +144,7 @@
ret := make([]fs.DirEntry, len(items))
for i := range items {
- ret[i] = dirEntry{items[i]}
+ ret[i] = common.FileInfoDirEntry{FileInfo: items[i]}
}
return ret, nil