[Updated] D8870: rhg: extract function handle_stdout_error
acezar (Antoine Cezar)
phabricator at mercurial-scm.org
Sat Aug 8 20:32:11 UTC 2020
Closed by commit rHG10c36ead86f8: rhg: extract function handle_stdout_error (authored by acezar).
This revision was automatically updated to reflect the committed changes.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D8870?vs=22253&id=22365
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D8870/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D8870
AFFECTED FILES
rust/rhg/src/ui.rs
CHANGE DETAILS
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
@@ -34,38 +34,23 @@
pub fn write_stdout(&self, bytes: &[u8]) -> Result<(), UiError> {
let mut stdout = self.stdout.lock();
- self.write_stream(&mut stdout, bytes)
- .or_else(|e| self.handle_stdout_error(e))?;
-
- stdout.flush().or_else(|e| self.handle_stdout_error(e))
- }
+ stdout
+ .write_all(bytes)
+ .or_else(|e| handle_stdout_error(e))?;
- /// Sometimes writing to stdout is not possible, try writing to stderr to
- /// signal that failure, otherwise just bail.
- fn handle_stdout_error(&self, error: io::Error) -> Result<(), UiError> {
- self.write_stderr(
- &[b"abort: ", error.to_string().as_bytes(), b"\n"].concat(),
- )?;
- Err(UiError::StdoutError(error))
+ stdout.flush().or_else(|e| handle_stdout_error(e))
}
/// Write bytes to stderr
pub fn write_stderr(&self, bytes: &[u8]) -> Result<(), UiError> {
let mut stderr = self.stderr.lock();
- self.write_stream(&mut stderr, bytes)
- .or_else(|e| Err(UiError::StderrError(e)))?;
+ stderr
+ .write_all(bytes)
+ .or_else(|e| handle_stderr_error(e))?;
stderr.flush().or_else(|e| Err(UiError::StderrError(e)))
}
-
- fn write_stream(
- &self,
- stream: &mut impl Write,
- bytes: &[u8],
- ) -> Result<(), io::Error> {
- stream.write_all(bytes)
- }
}
/// A buffered stdout writer for faster batch printing operations.
@@ -81,29 +66,31 @@
/// Write bytes to stdout buffer
pub fn write_all(&mut self, bytes: &[u8]) -> Result<(), UiError> {
- self.buf.write_all(bytes).or_else(|e| self.io_err(e))
+ self.buf
+ .write_all(bytes)
+ .or_else(|e| handle_stdout_error(e))
}
/// Flush bytes to stdout
pub fn flush(&mut self) -> Result<(), UiError> {
- self.buf.flush().or_else(|e| self.io_err(e))
- }
-
- fn io_err(&self, error: io::Error) -> Result<(), UiError> {
- if let ErrorKind::BrokenPipe = error.kind() {
- // This makes `| head` work for example
- return Ok(());
- }
- let mut stderr = io::stderr();
-
- stderr
- .write_all(
- &[b"abort: ", error.to_string().as_bytes(), b"\n"].concat(),
- )
- .map_err(|e| UiError::StderrError(e))?;
-
- stderr.flush().map_err(|e| UiError::StderrError(e))?;
-
- Err(UiError::StdoutError(error))
+ self.buf.flush().or_else(|e| handle_stdout_error(e))
}
}
+
+/// Sometimes writing to stdout is not possible, try writing to stderr to
+/// signal that failure, otherwise just bail.
+fn handle_stdout_error(error: io::Error) -> Result<(), UiError> {
+ if let ErrorKind::BrokenPipe = error.kind() {
+ // This makes `| head` work for example
+ return Ok(());
+ }
+ let mut stderr = io::stderr();
+
+ stderr
+ .write_all(&[b"abort: ", error.to_string().as_bytes(), b"\n"].concat())
+ .map_err(|e| UiError::StderrError(e))?;
+
+ stderr.flush().map_err(|e| UiError::StderrError(e))?;
+
+ Err(UiError::StdoutError(error))
+}
To: acezar, #hg-reviewers, Alphare, indygreg
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20200808/0ec50e15/attachment-0002.html>
More information about the Mercurial-patches
mailing list