# HG changeset patch # User Antoine Cezar # Date 1595579644 -7200 # Node ID 53af26aa5951e91f0fe2080b5270f86959826155 # Parent 10c36ead86f86316b3f7d18429808d7f939abc71 rhg: handle broken pipe error for stderr Differential Revision: https://phab.mercurial-scm.org/D8871 diff -r 10c36ead86f8 -r 53af26aa5951 rust/rhg/src/ui.rs --- a/rust/rhg/src/ui.rs Fri Jul 24 17:24:10 2020 +0200 +++ b/rust/rhg/src/ui.rs Fri Jul 24 10:34:04 2020 +0200 @@ -49,7 +49,7 @@ .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 @@ 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)) +}