diff options
| -rw-r--r-- | src/tools/tidy/src/x_version.rs | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/tools/tidy/src/x_version.rs b/src/tools/tidy/src/x_version.rs index dddf72f4747..1505775c6cc 100644 --- a/src/tools/tidy/src/x_version.rs +++ b/src/tools/tidy/src/x_version.rs @@ -4,15 +4,29 @@ use std::process::{Command, Stdio}; pub fn check(bad: &mut bool) { let result = Command::new("x").arg("--wrapper-version").stdout(Stdio::piped()).spawn(); - let child = match result { - Ok(child) => child, - Err(e) => match e.kind() { + // This runs the command inside a temporarily directory. + // This allows us to compare output of result to see if `--wrapper-version` is not a recognized argument to x. + let temp_result = Command::new("x").arg("--wrapper-version").current_dir(std::env::temp_dir()).stdout(Stdio::piped()).spawn(); + + let (child, temp_child) = match (result, temp_result) { + (Ok(child), Ok(temp_child)) => (child, temp_child), + // what would it mean if the temp cmd error'd? + (Ok(_child), Err(_e)) => todo!(), + (Err(e), _) => match e.kind() { ErrorKind::NotFound => return, _ => return tidy_error!(bad, "failed to run `x`: {}", e), }, }; let output = child.wait_with_output().unwrap(); + let temp_output = temp_child.wait_with_output().unwrap(); + + if output != temp_output { + return tidy_error!( + bad, + "Current version of x does not support the `--wrapper-version` argument\nConsider updating to the newer version of x by running `cargo install --path src/tools/x`" + ) + } if output.status.success() { let version = String::from_utf8_lossy(&output.stdout); |
