summaryrefslogtreecommitdiff
path: root/file.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 /file.go
parent04200620823cf9b11e0185234429af6180110adc (diff)
Fid ReadDir and improve tests
Diffstat (limited to 'file.go')
-rw-r--r--file.go48
1 files changed, 5 insertions, 43 deletions
diff --git a/file.go b/file.go
index ef952cb..13b58ee 100644
--- a/file.go
+++ b/file.go
@@ -5,8 +5,6 @@ import (
"io"
"os"
"path"
-
- "github.com/minio/minio-go/v7"
)
type File struct {
@@ -20,7 +18,9 @@ type File struct {
// implements io.Closer
func (f *File) Close() error {
- defer f.cancel()
+ if f.cancel != nil {
+ defer f.cancel()
+ }
if f.r != nil {
return f.r.Close()
}
@@ -70,50 +70,12 @@ func (f *File) Name() string {
return path.Base(f.key)
}
-func (f *File) readdir(count int, onlyDir bool) ([]os.FileInfo, error) {
- if !isDirPath(f.key) {
- return nil, ErrNotDirectory
- }
- if count == 0 {
- return []os.FileInfo{}, nil
- }
- ctx, cancel := f.fs.contextWithTimeout()
- defer cancel()
- objectsCh := f.fs.client.ListObjects(ctx, f.fs.bucket, minio.ListObjectsOptions{Prefix: f.key})
- n := 0
- lastDir := f.key
- results := make([]os.FileInfo, 0)
- for objectInfo := range objectsCh {
- base := path.Base(objectInfo.Key)
- dir := path.Dir(objectInfo.Key) + "/"
- if lastDir != dir {
- lastDir = dir
- results = append(results, &FileInfo{
- name: base,
- isDir: true,
- })
- if onlyDir {
- n += 1
- }
- }
- if !onlyDir {
- results = append(results, transformObjectInfo(objectInfo))
- n += 1
- }
- if n > count {
- break
- }
- }
-
- return results, nil
-}
-
func (f *File) Readdir(count int) ([]os.FileInfo, error) {
- return f.readdir(count, false)
+ return f.fs.readdir(f.key, count, false)
}
func (f *File) Readdirnames(n int) ([]string, error) {
- results, err := f.readdir(n, true)
+ results, err := f.fs.readdir(f.key, n, true)
if err != nil {
return nil, err
}