summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Holloway <holloway.p.r@gmail.com>2024-01-24 20:13:31 +0000
committerGitHub <noreply@github.com>2024-01-24 20:13:31 +0000
commit400e1ba23d4b26ebb23b5c41db4983920ecaf9aa (patch)
tree51c9e9f738d98068d938fc7a9f2655f9b3792ec6
parent079a078fdbfca0743dc22f9e83c86702b9f9b996 (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.rs7
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());
}