Files in Doozer are organized in a tree, much like in Unix. Each directory
contains a list of names that correspond to other directories or files. Each file
contains a sequence of bytes that can be read or written. The root of the store
is the directory /. The sequence of names leading from the root to any
given file, including the filename, constitutes a path that uniquely identifies
the file. Paths are notated by joining all the names with / between them.
For example, /foo/bar/baz refers to the file baz, inside the directory
bar, inside the directory foo, inside the root directory.
Names are UTF-8 character strings that contain only ASCII letters, numbers, .,
or -.
NOTE: This may seem ironic but we are keeping the door open to lift some of the restrictions.
Users are limited to whole-file read and writes. Users can only read a whole file or write over a whole file.
Changes to the store (i.e. creating, updating, or deleting a file) are applied,
one at a time, in sequence. Every change creates a new version of the store
with one difference from the previous version. Every version of the store gets
assigned an integer, its rev, one greater than the previous rev. Previous
revisions are kept for reference until some time later.