From 590ae3fadf8fc73e6f4c4e71ddf29721bf9afd31 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 30 May 2022 09:16:27 +0000 Subject: [PATCH] feat: preserve logs --- --- a/cmds/fleet/src/command.rs +++ b/cmds/fleet/src/command.rs @@ -196,10 +196,33 @@ } async fn run(&mut self) -> Result<()> { - self.inherit_stdio(); - let out = self.spawn()?.wait_with_output().await?; - if !out.status.success() { - anyhow::bail!("command ({:?}) failed with status {}", self, out.status); + self.stderr(Stdio::piped()); + self.stdout(Stdio::piped()); + let mut child = self.spawn()?; + let mut stderr = child.stderr.take().unwrap(); + let mut stdout = child.stdout.take().unwrap(); + let mut err = FramedRead::new(&mut stderr, LinesCodec::new()); + let mut out = FramedRead::new(&mut stdout, LinesCodec::new()); + loop { + select! { + e = err.next() => { + if let Some(e) = e { + warn!("{}", e?); + } + }, + o = out.next() => { + if let Some(o) = o { + info!("{}", o?); + } + }, + code = child.wait() => { + let code = code?; + if !code.success() { + anyhow::bail!("command ({:?}) failed with status {}", self, code); + } + break; + } + } } Ok(()) } -- gitstuff