Lazy implementation is now the default. Use `--eager` to force ffs to construct the entire filesystem on startup.
NB that lazy loading is not the same as lazy parsing. There's still plenty of savings left on the table.
There is some unwelcome code duplication in saving to accommodate type-level jiggery pokery.
Update to fuser=0.9 (i.e., 0.9.1). Update websites, version numbers, etc. for new release.
Finally use `destroy` properly, got rid of the `Drop` impl for `FS`. Drop `AutoUnmount` which wasn't doing anything anyway.
Fixes and improvements to CI, docs, and logging.
Benchmarks, in two flavors: real-world benchmarks and synthetic microbenchmarks.
`--time` flag for benchmarking output on stderr.
Using R to generate pretty graphs. Some overhaul of build scripts and artifacts, with the hope of simplifying the release system.
A new flag `--munge [rename|filter]` controls how a name munging will work.
Name munging only applies to fields named '.', '..', containing a NUL byte, or containing a forward slash '/'.
The `rename` option (the default) will change '.' to '_.' and '..' to '_..'; each NUL byte turns into '_NUL_' and each slash turns into '_SLASH_'.
This greatly simplified policy means that spaces and other special characters should work just fine in field names now.
Running `--new FILE.EXT` will:
- infer the output format form `EXT`
- use `FILE.EXT` as the output
- start with a single, empty, named directory (but allocate a bit more space)
In implementing this, I realized that introducing metadata (fad45bed4b) meant we no longer inferred types automatically. I added a type `Typ::Auto` and some inference code.
Extended attributes in `user.type` track the type of files and directories. Users can update these to alter the metadata.
Loading files records types; serialization tries to use them (but will default to strings or bytes if it can't interpret the file appropriately).
In particular, it's now possible to convert between both kinds of directories (list and named).
This isn't a long term solution, because extended attributes have no real affordances---it's not obvious that they even exist, and even once you see `user.type`, it's obvious what it means or what values it has. #2 has other ideas about ways to represent and manipulate metadata.
All of this comes with a few new flags and some brittle file ignoring behavior (macOS will generate `._*` files to hold extended attributes on filesystems that don't support them). The man page is updated with detail on the data model, and now the manpage is part of the website proper.