mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-16 17:58:14 +00:00
Auto merge of #6656 - phansch:command-failed-print-stderr, r=flip1995
clippy_dev: Pass stderr to CommandFailed This improves error reporting when running `rustfmt` fails for some reason, as seen [on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/257328-clippy/topic/Issue.20with.20rustfmt). It will now include the stderr output in the `CliError::CommandFailed` error. changelog: none
This commit is contained in:
commit
ed112741b2
1 changed files with 15 additions and 8 deletions
|
@ -8,7 +8,7 @@ use walkdir::WalkDir;
|
|||
|
||||
#[derive(Debug)]
|
||||
pub enum CliError {
|
||||
CommandFailed(String),
|
||||
CommandFailed(String, String),
|
||||
IoError(io::Error),
|
||||
RustfmtNotInstalled,
|
||||
WalkDirError(walkdir::Error),
|
||||
|
@ -75,8 +75,8 @@ pub fn run(check: bool, verbose: bool) {
|
|||
|
||||
fn output_err(err: CliError) {
|
||||
match err {
|
||||
CliError::CommandFailed(command) => {
|
||||
eprintln!("error: A command failed! `{}`", command);
|
||||
CliError::CommandFailed(command, stderr) => {
|
||||
eprintln!("error: A command failed! `{}`\nstderr: {}", command, stderr);
|
||||
},
|
||||
CliError::IoError(err) => {
|
||||
eprintln!("error: {}", err);
|
||||
|
@ -136,12 +136,16 @@ fn exec(
|
|||
println!("{}", format_command(&program, &dir, args));
|
||||
}
|
||||
|
||||
let mut child = Command::new(&program).current_dir(&dir).args(args.iter()).spawn()?;
|
||||
let code = child.wait()?;
|
||||
let success = code.success();
|
||||
let child = Command::new(&program).current_dir(&dir).args(args.iter()).spawn()?;
|
||||
let output = child.wait_with_output()?;
|
||||
let success = output.status.success();
|
||||
|
||||
if !context.check && !success {
|
||||
return Err(CliError::CommandFailed(format_command(&program, &dir, args)));
|
||||
let stderr = std::str::from_utf8(&output.stderr).unwrap_or("");
|
||||
return Err(CliError::CommandFailed(
|
||||
format_command(&program, &dir, args),
|
||||
String::from(stderr),
|
||||
));
|
||||
}
|
||||
|
||||
Ok(success)
|
||||
|
@ -177,7 +181,10 @@ fn rustfmt_test(context: &FmtContext) -> Result<(), CliError> {
|
|||
{
|
||||
Err(CliError::RustfmtNotInstalled)
|
||||
} else {
|
||||
Err(CliError::CommandFailed(format_command(&program, &dir, args)))
|
||||
Err(CliError::CommandFailed(
|
||||
format_command(&program, &dir, args),
|
||||
std::str::from_utf8(&output.stderr).unwrap_or("").to_string(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue