Feature #13272

Updated by Tom Clegg almost 3 years ago

Continue where #13111 leaves off, bringing the /users/ tree exported by keep-web up to (at least) a level of functionality and performance similar to arv-mount.

* Add/remove/update files/dirs in collections
* Add/remove collections by name using mkcol/delete
* Copy/move files/dirs from one collection to another (possibly /users/* to /c=*/)
* Access shared projects and collections (i.e., ones not reachable through /users/$myusername/) by name
/by_id/$project_uuid/ (like #12320)

* Cache the filesystem layout, so a sequence of N webdav requests with the same token and same/overlapping paths don't need to retrieve the whole filesystem layout from API server N times
* Use a single cache entry for any given {collection, token} tuple, regardless of whether it's accessed via /c=UUID/, /by_id/UUID/, /by_id/PDH/, /users/alice/foo/, etc.

Unlike arv-mount, webdav writes should continue to be atomic: after concurrent requests to write content A to F and write content B to F, F should contain either A or B, not a mix of the two.