backends: make NewObject return fs.ErrorIsDir if possible

This changes the interface to NewObject so that if NewObject is called
on a directory then it should return fs.ErrorIsDir if possible without
doing any extra work, otherwise fs.ErrorObjectNotFound.

Tested on integration test server with:

go run integration-test.go -tests backend -run TestIntegration/FsMkdir/FsPutFiles/FsNewObjectDir -branch fix-stat -maxtries 1
This commit is contained in:
Nick Craig-Wood
2021-10-14 17:15:50 +01:00
parent af732c5431
commit 3fbaa4c0b0
19 changed files with 42 additions and 23 deletions
+6 -2
View File
@@ -337,8 +337,12 @@ func (f *Fs) readMetaDataForIDPath(ctx context.Context, id, path string, directo
if directoriesOnly && item.Type != api.ItemTypeFolder {
return nil, fs.ErrorIsFile
}
if filesOnly && item.Type != api.ItemTypeFile {
return nil, fs.ErrorNotAFile
if filesOnly {
if item.Type == api.ItemTypeFolder {
return nil, fs.ErrorIsDir
} else if item.Type != api.ItemTypeFile {
return nil, fs.ErrorNotAFile
}
}
return &item, nil
}