Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 19 additions & 29 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -506,8 +506,20 @@ impl<'test> TestCx<'test> {
}
}

/// Runs a [`Command`] and waits for it to finish, then converts its exit
/// status and output streams into a [`ProcRes`].
///
/// The command might have succeeded or failed; it is the caller's
/// responsibility to check the exit status and take appropriate action.
///
/// # Panics
/// Panics if the command couldn't be executed at all
/// (e.g. because the executable could not be found).
#[must_use = "caller should check whether the command succeeded"]
fn run_command_to_procres(&self, cmd: &mut Command) -> ProcRes {
let output = cmd.output().unwrap_or_else(|e| panic!("failed to exec `{cmd:?}`: {e:?}"));
let output = cmd
.output()
.unwrap_or_else(|e| self.fatal(&format!("failed to exec `{cmd:?}` because: {e}")));

let proc_res = ProcRes {
status: output.status,
Expand Down Expand Up @@ -1232,7 +1244,7 @@ impl<'test> TestCx<'test> {
} else {
self.config.lldb_python_dir.as_ref().unwrap().to_string()
};
self.cmd2procres(
self.run_command_to_procres(
Command::new(&self.config.python)
.arg(&lldb_script_path)
.arg(test_executable)
Expand All @@ -1242,28 +1254,6 @@ impl<'test> TestCx<'test> {
)
}

fn cmd2procres(&self, cmd: &mut Command) -> ProcRes {
let (status, out, err) = match cmd.output() {
Ok(Output { status, stdout, stderr }) => {
(status, String::from_utf8(stdout).unwrap(), String::from_utf8(stderr).unwrap())
}
Err(e) => self.fatal(&format!(
"Failed to setup Python process for \
LLDB script: {}",
e
)),
};

self.dump_output(&out, &err);
ProcRes {
status,
stdout: out,
stderr: err,
truncated: Truncated::No,
cmdline: format!("{:?}", cmd),
}
}

fn cleanup_debug_info_options(&self, options: &Vec<String>) -> Vec<String> {
// Remove options that are either unwanted (-O) or may lead to duplicates due to RUSTFLAGS.
let options_to_remove = ["-O".to_owned(), "-g".to_owned(), "--debuginfo".to_owned()];
Expand Down Expand Up @@ -2683,7 +2673,7 @@ impl<'test> TestCx<'test> {
if self.config.bless {
cmd.arg("--bless");
}
let res = self.cmd2procres(&mut cmd);
let res = self.run_command_to_procres(&mut cmd);
if !res.status.success() {
self.fatal_proc_rec_with_ctx("htmldocck failed!", &res, |mut this| {
this.compare_to_default_rustdoc(&out_dir)
Expand Down Expand Up @@ -2860,7 +2850,7 @@ impl<'test> TestCx<'test> {
let root = self.config.find_rust_src_root().unwrap();
let mut json_out = out_dir.join(self.testpaths.file.file_stem().unwrap());
json_out.set_extension("json");
let res = self.cmd2procres(
let res = self.run_command_to_procres(
Command::new(self.config.jsondocck_path.as_ref().unwrap())
.arg("--doc-dir")
.arg(root.join(&out_dir))
Expand All @@ -2878,7 +2868,7 @@ impl<'test> TestCx<'test> {
let mut json_out = out_dir.join(self.testpaths.file.file_stem().unwrap());
json_out.set_extension("json");

let res = self.cmd2procres(
let res = self.run_command_to_procres(
Command::new(self.config.jsondoclint_path.as_ref().unwrap()).arg(&json_out),
);

Expand Down Expand Up @@ -3526,7 +3516,7 @@ impl<'test> TestCx<'test> {
cmd.arg("--sysroot").arg(&stage0_sysroot);
}

let res = self.cmd2procres(&mut cmd);
let res = self.run_command_to_procres(&mut cmd);
if !res.status.success() {
self.fatal_proc_rec("run-make test failed: could not build `rmake.rs` recipe", &res);
}
Expand Down Expand Up @@ -3687,7 +3677,7 @@ impl<'test> TestCx<'test> {
let root = self.config.find_rust_src_root().unwrap();
let file_stem =
self.testpaths.file.file_stem().and_then(|f| f.to_str()).expect("no file stem");
let res = self.cmd2procres(
let res = self.run_command_to_procres(
Command::new(&nodejs)
.arg(root.join("src/tools/rustdoc-js/tester.js"))
.arg("--doc-folder")
Expand Down