process: deprecate Child stdio accessors in favor of pub fields (#2014)

Fixes #2009
This commit is contained in:
Ivan Petkov 2020-01-06 10:24:41 -08:00 committed by Carl Lerche
parent d45f61c183
commit 188fc6e0d2
3 changed files with 24 additions and 15 deletions

View File

@ -25,8 +25,8 @@ fn cat() -> Command {
} }
async fn feed_cat(mut cat: Child, n: usize) -> io::Result<ExitStatus> { async fn feed_cat(mut cat: Child, n: usize) -> io::Result<ExitStatus> {
let mut stdin = cat.stdin().take().unwrap(); let mut stdin = cat.stdin.take().unwrap();
let stdout = cat.stdout().take().unwrap(); let stdout = cat.stdout.take().unwrap();
// Produce n lines on the child's stdout. // Produce n lines on the child's stdout.
let write = async { let write = async {
@ -97,7 +97,7 @@ async fn feed_a_lot() {
#[tokio::test] #[tokio::test]
async fn wait_with_output_captures() { async fn wait_with_output_captures() {
let mut child = cat().spawn().unwrap(); let mut child = cat().spawn().unwrap();
let mut stdin = child.stdin().take().unwrap(); let mut stdin = child.stdin.take().unwrap();
let write_bytes = b"1234"; let write_bytes = b"1234";

View File

@ -74,7 +74,7 @@
//! let mut child = cmd.spawn() //! let mut child = cmd.spawn()
//! .expect("failed to spawn command"); //! .expect("failed to spawn command");
//! //!
//! let stdout = child.stdout().take() //! let stdout = child.stdout.take()
//! .expect("child did not have a handle to stdout"); //! .expect("child did not have a handle to stdout");
//! //!
//! let mut reader = BufReader::new(stdout).lines(); //! let mut reader = BufReader::new(stdout).lines();
@ -729,9 +729,18 @@ where
#[derive(Debug)] #[derive(Debug)]
pub struct Child { pub struct Child {
child: ChildDropGuard<imp::Child>, child: ChildDropGuard<imp::Child>,
stdin: Option<ChildStdin>,
stdout: Option<ChildStdout>, /// The handle for writing to the child's standard input (stdin), if it has
stderr: Option<ChildStderr>, /// been captured.
pub stdin: Option<ChildStdin>,
/// The handle for reading from the child's standard output (stdout), if it
/// has been captured.
pub stdout: Option<ChildStdout>,
/// The handle for reading from the child's standard error (stderr), if it
/// has been captured.
pub stderr: Option<ChildStderr>,
} }
impl Child { impl Child {
@ -747,20 +756,20 @@ impl Child {
self.child.kill() self.child.kill()
} }
/// Returns a handle for writing to the child's stdin, if it has been #[doc(hidden)]
/// captured. #[deprecated(note = "please use `child.stdin` instead")]
pub fn stdin(&mut self) -> &mut Option<ChildStdin> { pub fn stdin(&mut self) -> &mut Option<ChildStdin> {
&mut self.stdin &mut self.stdin
} }
/// Returns a handle for reading from the child's stdout, if it has been #[doc(hidden)]
/// captured. #[deprecated(note = "please use `child.stdout` instead")]
pub fn stdout(&mut self) -> &mut Option<ChildStdout> { pub fn stdout(&mut self) -> &mut Option<ChildStdout> {
&mut self.stdout &mut self.stdout
} }
/// Returns a handle for reading from the child's stderr, if it has been #[doc(hidden)]
/// captured. #[deprecated(note = "please use `child.stderr` instead")]
pub fn stderr(&mut self) -> &mut Option<ChildStderr> { pub fn stderr(&mut self) -> &mut Option<ChildStderr> {
&mut self.stderr &mut self.stderr
} }
@ -792,7 +801,7 @@ impl Child {
Ok(vec) Ok(vec)
} }
drop(self.stdin().take()); drop(self.stdin.take());
let stdout_fut = read_to_end(self.stdout.take()); let stdout_fut = read_to_end(self.stdout.take());
let stderr_fut = read_to_end(self.stderr.take()); let stderr_fut = read_to_end(self.stderr.take());

View File

@ -32,7 +32,7 @@ async fn kill_on_drop() {
delay_for(Duration::from_secs(2)).await; delay_for(Duration::from_secs(2)).await;
let mut out = child.stdout().take().unwrap(); let mut out = child.stdout.take().unwrap();
drop(child); drop(child);
let mut msg = String::new(); let mut msg = String::new();