1
mirror of https://github.com/rclone/rclone synced 2024-07-21 08:54:12 +02:00

operations: fix lsjson --stat on root directories of bucket based backends

This commit is contained in:
Nick Craig-Wood 2021-10-16 10:17:41 +01:00
parent f50537b64b
commit 54da6154c4
2 changed files with 34 additions and 9 deletions

View File

@ -264,6 +264,21 @@ func StatJSON(ctx context.Context, fsrc fs.Fs, remote string, opt *ListJSONOpt)
if err != nil {
return nil, err
}
// Root is always a directory. When we have a NewDirEntry
// primitive we need to call it, but for now this will do.
if remote == "" {
if !lj.dirs {
return nil, nil
}
// Check the root directory exists
_, err := fsrc.List(ctx, "")
if err != nil {
return nil, err
}
return lj.entry(ctx, fs.NewDir("", time.Now()))
}
// Could be a file or a directory here
if lj.files {
// NewObject can return the sentinel errors ErrorObjectNotFound or ErrorIsDir
@ -288,14 +303,6 @@ func StatJSON(ctx context.Context, fsrc fs.Fs, remote string, opt *ListJSONOpt)
}
}
// Must be a directory here
if remote == "" {
// Check the root directory exists
_, err := fsrc.List(ctx, "")
if err != nil {
return nil, err
}
return lj.entry(ctx, fs.NewDir("", time.Now()))
}
parent := path.Dir(remote)
if parent == "." || parent == "/" {
parent = ""

View File

@ -133,7 +133,7 @@ func TestListJSON(t *testing.T) {
IsDir: false,
}},
}, {
name: "NoModTime",
name: "NoMimeType",
opt: operations.ListJSONOpt{
FilesOnly: true,
NoMimeType: true,
@ -254,6 +254,24 @@ func TestStatJSON(t *testing.T) {
Name: "",
IsDir: true,
},
}, {
name: "RootFilesOnly",
remote: "",
opt: operations.ListJSONOpt{
FilesOnly: true,
},
want: nil,
}, {
name: "RootDirsOnly",
remote: "",
opt: operations.ListJSONOpt{
DirsOnly: true,
},
want: &operations.ListJSONItem{
Path: "",
Name: "",
IsDir: true,
},
}, {
name: "Dir",
remote: "sub",