# HG changeset patch # User Antoine Cezar # Date 2020-07-24 08:34:04 # Node ID 53af26aa5951e91f0fe2080b5270f86959826155 # Parent 10c36ead86f86316b3f7d18429808d7f939abc71 rhg: handle broken pipe error for stderr Differential Revision: https://phab.mercurial-scm.org/D8871 diff --git a/rust/rhg/src/ui.rs b/rust/rhg/src/ui.rs --- a/rust/rhg/src/ui.rs +++ b/rust/rhg/src/ui.rs @@ -49,7 +49,7 @@ impl Ui { .write_all(bytes) .or_else(|e| handle_stderr_error(e))?; - stderr.flush().or_else(|e| Err(UiError::StderrError(e))) + stderr.flush().or_else(|e| handle_stderr_error(e)) } } @@ -94,3 +94,13 @@ fn handle_stdout_error(error: io::Error) Err(UiError::StdoutError(error)) } + +/// Sometimes writing to stderr is not possible. +fn handle_stderr_error(error: io::Error) -> Result<(), UiError> { + // A broken pipe should not result in a error + // like with `| head` for example + if let ErrorKind::BrokenPipe = error.kind() { + return Ok(()); + } + Err(UiError::StdoutError(error)) +}