Skip to content

Commit

Permalink
poll rustfmt child processes
Browse files Browse the repository at this point in the history
  • Loading branch information
the8472 committed Dec 17, 2022
1 parent 5620afc commit ab7d769
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions src/bootstrap/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::path::{Path, PathBuf};
use std::process::{Command, Stdio};
use std::sync::mpsc::SyncSender;

fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl FnMut() {
fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl FnMut(bool) -> bool {
let mut cmd = Command::new(&rustfmt);
// avoid the submodule config paths from coming into play,
// we only allow a single global config for the workspace for now
Expand All @@ -23,7 +23,13 @@ fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl F
let cmd_debug = format!("{:?}", cmd);
let mut cmd = cmd.spawn().expect("running rustfmt");
// poor man's async: return a closure that'll wait for rustfmt's completion
move || {
move |block: bool| -> bool {
if !block {
match cmd.try_wait() {
Ok(Some(_)) => {}
_ => return false,
}
}
let status = cmd.wait().unwrap();
if !status.success() {
eprintln!(
Expand All @@ -34,6 +40,7 @@ fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl F
);
crate::detail_exit(1);
}
true
}
}

Expand Down Expand Up @@ -146,15 +153,23 @@ pub fn format(build: &Builder<'_>, check: bool, paths: &[PathBuf]) {
let child = rustfmt(&src, &rustfmt_path, paths.as_slice(), check);
children.push_back(child);

// poll completion before waiting
for i in (0..children.len()).rev() {
if children[i](false) {
children.swap_remove_back(i);
break;
}
}

if children.len() >= max_processes {
// await oldest child
children.pop_front().unwrap()();
children.pop_front().unwrap()(true);
}
}

// await remaining children
for mut child in children {
child();
child(true);
}
});

Expand Down

0 comments on commit ab7d769

Please sign in to comment.