summaryrefslogtreecommitdiff
path: root/fs.go
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2022-08-15 04:24:23 +0300
committerMarin Ivanov <[email protected]>2022-08-15 04:24:23 +0300
commit43069c737dde59bd86e5b09c496d9df90f29d136 (patch)
tree8d6e81c36c0f16c9a5da2f90af31df6f08dd6bab /fs.go
parent04200620823cf9b11e0185234429af6180110adc (diff)
Fid ReadDir and improve tests
Diffstat (limited to 'fs.go')
-rw-r--r--fs.go29
1 files changed, 28 insertions, 1 deletions
diff --git a/fs.go b/fs.go
index d886de8..9ee3c33 100644
--- a/fs.go
+++ b/fs.go
@@ -154,7 +154,7 @@ func (fs *Fs) RemoveAll(path string) error {
if !isDirPath(path) {
return ErrNotDirectory
}
- objectsCh := fs.client.ListObjects(ctx, fs.bucket, minio.ListObjectsOptions{Prefix: path})
+ objectsCh := fs.client.ListObjects(ctx, fs.bucket, minio.ListObjectsOptions{Prefix: path, Recursive: true})
errc := fs.client.RemoveObjects(ctx, fs.bucket, objectsCh, minio.RemoveObjectsOptions{})
for err := range errc {
if err.Err != nil {
@@ -242,6 +242,33 @@ func (fs *Fs) newObjectWriter(key string) (io.WriteCloser, context.CancelFunc, <
return w, cancel, errc
}
+func (fs *Fs) readdir(directory string, count int, onlyDir bool) ([]os.FileInfo, error) {
+ if !isDirPath(directory) {
+ return nil, ErrNotDirectory
+ }
+ if count == 0 {
+ return []os.FileInfo{}, nil
+ }
+ ctx, cancel := fs.contextWithTimeout()
+ defer cancel()
+ objectsCh := fs.client.ListObjects(ctx, fs.bucket, minio.ListObjectsOptions{Prefix: directory})
+ n := uint(0)
+ maxcount := uint(count)
+ results := make([]os.FileInfo, 0)
+ for objectInfo := range objectsCh {
+ if onlyDir && !isDirPath(objectInfo.Key) {
+ continue
+ }
+ results = append(results, transformObjectInfo(objectInfo))
+ n += 1
+ if n > maxcount {
+ break
+ }
+ }
+
+ return results, nil
+}
+
func transformError(err error) error {
resp, ok := err.(minio.ErrorResponse)
if !ok {