Make the coverage job include the full workspace and collect
coverage from spawned CLI test runs. This prevents exercised
tar paths from showing up as uncovered.
Replace println! in list, create, and extract operations with
writeln! on a BufWriter<StdoutLock>. This acquires stdout's mutex
once per operation instead of once per write call, and batches
writes to reduce write(2) syscalls.
Also propagates write errors (e.g. broken pipe) gracefully instead
of panicking.
* tar: replace all string-based error variants with structured types
Every TarError variant now carries PathBuf and/or io::Error data
instead of a pre-formatted String. Add thiserror derive macros so
Display implementations are generated from #[error(...)] attributes
in one central place. Eliminates the last generic TarOperation and
InvalidArchive string variants.
Add tar prefixes, update tests to match.
Add a CI step to run `rustup component add llvm-tools` before
generating coverage data. grcov requires llvm-profdata (part of
llvm-tools) to process .profraw files; without it the coverage
job fails with "couldn't find llvm-profdata".
Replace `uucore::util_name()` (argv[0]) with the literal string
"tar (uutils)" as the clap Command name. This gives a consistent,
recognisable program name in --help output regardless of what the binary was invoked as.
Closes#150
Implement the list operation. Non-verbose (-t) prints one entry path
per line. Verbose (-tv) prints permissions, owner/group, size,
modification time, and path — matching GNU tar's ls-l style output.
Adds conflict group so -c, -x, and -t are mutually exclusive.
Pulls in chrono for timestamp formatting in verbose output. chrono is
already in the workspace dependency set and will also be needed for
date parsing when --newer=DATE is implemented.
Point uucore/uutests at the coreutils git repo while we're iterating
quickly on basic functionality.