Merge pull request #966 from harshavardhana/readdir-optimize

fs: Improve upon proper lexical ordering for ListObjects()
This commit is contained in:
Harshavardhana 2015-11-11 14:56:33 -08:00
commit ff59181527
1 changed files with 16 additions and 1 deletions

View File

@ -63,6 +63,17 @@ func WalkUnsorted(root string, walkFn WalkFunc) error {
return walk(root, info, walkFn) return walk(root, info, walkFn)
} }
// getRealName - gets the proper filename for sorting purposes
// Readdir() filters out directory names without separators, add
// them back for proper sorting results.
func getRealName(info os.FileInfo) string {
if info.IsDir() {
// Make sure directory has its end separator.
return info.Name() + string(os.PathSeparator)
}
return info.Name()
}
// readDirNames reads the directory named by dirname and returns // readDirNames reads the directory named by dirname and returns
// a sorted list of directory entries. // a sorted list of directory entries.
func readDirNames(dirname string) ([]string, error) { func readDirNames(dirname string) ([]string, error) {
@ -79,11 +90,15 @@ func readDirUnsortedNames(dirname string) ([]string, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
names, err := f.Readdirnames(-1) nameInfos, err := f.Readdir(-1)
f.Close() f.Close()
if err != nil { if err != nil {
return nil, err return nil, err
} }
var names []string
for _, nameInfo := range nameInfos {
names = append(names, getRealName(nameInfo))
}
return names, nil return names, nil
} }