diff options
author | Peter Holloway <holloway.p.r@gmail.com> | 2024-01-24 20:13:31 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-24 20:13:31 +0000 |
commit | 400e1ba23d4b26ebb23b5c41db4983920ecaf9aa (patch) | |
tree | 51c9e9f738d98068d938fc7a9f2655f9b3792ec6 | |
parent | 079a078fdbfca0743dc22f9e83c86702b9f9b996 (diff) |
fix: Check for format errors when printing history (#1623)
The runtime formatting used to list history commands can fail in its
Display implementation and the error is not propagated through to the
write error it causes. Instead, the error is cached in the FormatArgs
being printed. It's a bit clumsy but by checking if there's a cached
error, we can get a more useful error for the user. eg,
atuin search cargo --format '{invalid}'
gives
history output failed with: The requested key "invalid" is unknown
instead of
history output failed with: formatter error
-rw-r--r-- | atuin/src/command/client/history.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/atuin/src/command/client/history.rs b/atuin/src/command/client/history.rs index 18fd5794..b91fc57a 100644 --- a/atuin/src/command/client/history.rs +++ b/atuin/src/command/client/history.rs @@ -152,7 +152,12 @@ pub fn print_list( for h in iterator { let fh = FmtHistory(h, CmdFormat::for_output(&w)); let args = parsed_fmt.with_args(&fh); - check_for_write_errors(write!(w, "{args}{entry_terminator}")); + let write = write!(w, "{args}{entry_terminator}"); + if let Err(err) = args.status() { + eprintln!("ERROR: history output failed with: {err}"); + std::process::exit(1); + } + check_for_write_errors(write); if flush_each_line { check_for_write_errors(w.flush()); } |