mirror of
https://github.com/rclone/rclone.git
synced 2024-11-26 02:09:55 +08:00
486a10bec5
Before this change, listing a subdirectory gave errors like this: Entry doesn't belong in directory "" (contains subdir) - ignoring It also did full recursive listings when it didn't need to. This was caused by the code using the underlying Fs to do recursive listings on bucket based backends. Using both the VFS and the underlying Fs is a mistake so this patch removes the code which uses the underlying Fs and just uses the VFS. Fixes #7500
50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
package s3
|
|
|
|
import (
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/Mikubill/gofakes3"
|
|
)
|
|
|
|
func (b *s3Backend) entryListR(bucket, fdPath, name string, addPrefix bool, response *gofakes3.ObjectList) error {
|
|
fp := path.Join(bucket, fdPath)
|
|
|
|
dirEntries, err := getDirEntries(fp, b.vfs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, entry := range dirEntries {
|
|
object := entry.Name()
|
|
|
|
// workround for control-chars detect
|
|
objectPath := path.Join(fdPath, object)
|
|
|
|
if !strings.HasPrefix(object, name) {
|
|
continue
|
|
}
|
|
|
|
if entry.IsDir() {
|
|
if addPrefix {
|
|
response.AddPrefix(gofakes3.URLEncode(objectPath))
|
|
continue
|
|
}
|
|
err := b.entryListR(bucket, path.Join(fdPath, object), "", false, response)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
item := &gofakes3.Content{
|
|
Key: gofakes3.URLEncode(objectPath),
|
|
LastModified: gofakes3.NewContentTime(entry.ModTime()),
|
|
ETag: getFileHash(entry),
|
|
Size: entry.Size(),
|
|
StorageClass: gofakes3.StorageStandard,
|
|
}
|
|
response.Add(item)
|
|
}
|
|
}
|
|
return nil
|
|
}
|