Test report and trees stdout write failures (closes #30)
check / check (push) Successful in 1m34s
check / check (push) Successful in 1m34s
report and trees already checked every stdout write and the final flush. run now takes the stdout it hands to them, so tests pass a closed file or a failing writer instead of swapping os.Stdout: a closed stdout exits 1 with a one-line diagnostic, and the writer's error reaches the caller. README "Error handling" now states the two cases that never reach sfdupes as a failed write: a pipe reader that exits early ends the process with SIGPIPE, as with cat; and stdout closed with >&- is replaced by /dev/null by the Go runtime before main runs, so the run succeeds. Model: opus-5-5
This commit was merged in pull request #74.
This commit is contained in:
@@ -573,6 +573,18 @@ Additional requirements:
|
||||
- `2`: usage error (including `scan` with no `PATH` operand and
|
||||
`report`/`trees` with any positional argument).
|
||||
|
||||
A stdout write failure, such as a full disk, is reported in one line on
|
||||
stderr and exits 1. Two cases never reach sfdupes as a failed write:
|
||||
|
||||
- When the reader of a stdout pipe exits early, as in
|
||||
`sfdupes report | head`, the next write ends sfdupes with `SIGPIPE`,
|
||||
quietly and without a summary, the way `cat` or `sort` end. The
|
||||
shell reports the signal (status 141 in most shells), not exit 1.
|
||||
- When stdout is closed outright (`sfdupes report >&-`), the Go
|
||||
runtime opens `/dev/null` in its place before sfdupes starts, so
|
||||
the output is discarded and the run succeeds, as with
|
||||
`> /dev/null`.
|
||||
|
||||
## Entrypoints
|
||||
|
||||
This repository adheres to the
|
||||
|
||||
Reference in New Issue
Block a user