From 400e1ba23d4b26ebb23b5c41db4983920ecaf9aa Mon Sep 17 00:00:00 2001 From: Peter Holloway Date: Wed, 24 Jan 2024 20:13:31 +0000 Subject: [PATCH] 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 --- atuin/src/command/client/history.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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()); }