[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