`stuffr pack proj -o backup.tar.gz` works. Both halves were missing:
pack refused a directory, and a container over a codec could not be
composed on write.
BREAKING: `Sink` is now the write-side currency. `Container::create`
takes `Box<dyn Sink>` and `ArchiveWrite::finish` returns one, so the
caller can finish the codec layer beneath a container. `Codec::encoder`
is unchanged. `Fidelity::EntrySkipped::reason` is now `String`.
Fixed, shipped in 0.2.0:
- `pack a -o x.tar.gz` exited 0 and wrote a plain gzip with no tar
inside; `--format tar -o x.tar.gz` wrote a bare uncompressed tar that
gunzip rejects. An output name's whole chain is now honoured.
- cpio wrote regular files with no file-type bits, so GNU cpio dropped
every one of them silently at exit 0. bsdcpio tolerated it, which is
why it survived a full phase of review on macOS.
- ar wrote member names inline, so GNU ar truncated `proj/a.txt` and
`proj/sub/b.bin` both to `proj` and they collided. Names containing a
slash now take the BSD extended form, which both tools read verbatim.
New:
- `pack` walks directory trees, stores symlinks rather than following
them, and reports what it could not store instead of failing.
- `--index N` on `cat` and `unpack`, an index column on `list`, and
`--strict-fidelity` on `list`.
- A zip whose central directory shadows duplicate names now says so
rather than under-reporting and claiming exact fidelity.
Known limitations: archives written by stuffr <= 0.3.0 remain
unreadable by GNU cpio and nothing repairs them. `cargo install stuffr`
fails — the binary is `cargo install stuffr-cli`.
817 tests under --all-features, 752 on the default tier.