remotestorage / remotestorage.js

⬡ JavaScript client library for integrating remoteStorage in apps
https://remotestoragejs.readthedocs.io
MIT License
2.31k stars 141 forks source link

getFile creates parent folders in Google Drive #1186

Open kevincox opened 4 years ago

kevincox commented 4 years ago

See the following example:

let client = remoteStorage.remote.rs.scope("/com.example/");
client.getFile("some/folder/that/doesnt/exist");

This will create some/folder/that/doesnt. This is incredibly surprising for a read operation and can result in some applications that rely on folder listing to fail as now there are empty folders without the expected contents.

michielbdejong commented 4 years ago

Right, it shouldn't be necessary to create parent folders in situations where the file itself does not get created.

sorentycho commented 4 years ago

This also seems in some circumstances to be able to cause the creation multiple copies of the nonexistent parent directory, if there are multiple requests in flight at once.

stuartlangridge commented 2 years ago

I can confirm that Google Drive can often see multiple folders called "remotestorage", or multiple folders under "remotestorage". This is caused by the confluence of three things:

  1. Google Drive can have multiple folders with the same name (which the remoteStorage backend can't)
  2. referencing a file creates its parent folders, asychronously
  3. if a file is referenced multiple times then there can be multiple parent-folder creation requests in flight at once, as @sorentycho says

so this all leads to having two "remotestorage" folders. I think the code to create is probably a little bit lazy about sending multiple create requests for the same folder on the assumption that it doesn't actually matter if you create a folder that already exists... but for the Google Drive back end it actually does matter.