Make it easier to detect when bootstrap tries to read uncaptured stdo… · rust-lang/rust@1984a46 (original) (raw)
`@@ -223,17 +223,31 @@ pub fn command<S: AsRef>(program: S) -> BootstrapCommand {
`
223
223
`}
`
224
224
``
225
225
`/// Represents the output of an executed process.
`
226
``
`-
#[allow(unused)]
`
227
226
`pub struct CommandOutput {
`
228
227
`status: CommandStatus,
`
229
``
`-
stdout: Vec,
`
230
``
`-
stderr: Vec,
`
``
228
`+
stdout: Option<Vec>,
`
``
229
`+
stderr: Option<Vec>,
`
231
230
`}
`
232
231
``
233
232
`impl CommandOutput {
`
234
233
`#[must_use]
`
235
234
`pub fn did_not_start() -> Self {
`
236
``
`-
Self { status: CommandStatus::DidNotStart, stdout: vec![], stderr: vec![] }
`
``
235
`+
Self { status: CommandStatus::DidNotStart, stdout: None, stderr: None }
`
``
236
`+
}
`
``
237
+
``
238
`+
#[must_use]
`
``
239
`+
pub fn from_output(output: Output, stdout: OutputMode, stderr: OutputMode) -> Self {
`
``
240
`+
Self {
`
``
241
`+
status: CommandStatus::Finished(output.status),
`
``
242
`+
stdout: match stdout {
`
``
243
`+
OutputMode::Print => None,
`
``
244
`+
OutputMode::Capture => Some(output.stdout),
`
``
245
`+
},
`
``
246
`+
stderr: match stderr {
`
``
247
`+
OutputMode::Print => None,
`
``
248
`+
OutputMode::Capture => Some(output.stderr),
`
``
249
`+
},
`
``
250
`+
}
`
237
251
`}
`
238
252
``
239
253
`#[must_use]
`
`@@ -259,7 +273,10 @@ impl CommandOutput {
`
259
273
``
260
274
`#[must_use]
`
261
275
`pub fn stdout(&self) -> String {
`
262
``
`-
String::from_utf8(self.stdout.clone()).expect("Cannot parse process stdout as UTF-8")
`
``
276
`+
String::from_utf8(
`
``
277
`+
self.stdout.clone().expect("Accessing stdout of a command that did not capture stdout"),
`
``
278
`+
)
`
``
279
`+
.expect("Cannot parse process stdout as UTF-8")
`
263
280
`}
`
264
281
``
265
282
`#[must_use]
`
`@@ -269,26 +286,19 @@ impl CommandOutput {
`
269
286
``
270
287
`#[must_use]
`
271
288
`pub fn stderr(&self) -> String {
`
272
``
`-
String::from_utf8(self.stderr.clone()).expect("Cannot parse process stderr as UTF-8")
`
``
289
`+
String::from_utf8(
`
``
290
`+
self.stderr.clone().expect("Accessing stderr of a command that did not capture stderr"),
`
``
291
`+
)
`
``
292
`+
.expect("Cannot parse process stderr as UTF-8")
`
273
293
`}
`
274
294
`}
`
275
295
``
276
296
`impl Default for CommandOutput {
`
277
297
`fn default() -> Self {
`
278
298
`Self {
`
279
299
`status: CommandStatus::Finished(ExitStatus::default()),
`
280
``
`-
stdout: vec![],
`
281
``
`-
stderr: vec![],
`
282
``
`-
}
`
283
``
`-
}
`
284
``
`-
}
`
285
``
-
286
``
`-
impl From for CommandOutput {
`
287
``
`-
fn from(output: Output) -> Self {
`
288
``
`-
Self {
`
289
``
`-
status: CommandStatus::Finished(output.status),
`
290
``
`-
stdout: output.stdout,
`
291
``
`-
stderr: output.stderr,
`
``
300
`+
stdout: Some(vec![]),
`
``
301
`+
stderr: Some(vec![]),
`
292
302
`}
`
293
303
`}
`
294
304
`}
`