Skip to content

Commit 1182387

Browse files
committed
Auto merge of rust-lang#12329 - jonas-schievink:build-script-errors, r=jonas-schievink
fix: Don't swallow build script errors
2 parents 2a978e1 + 33939a3 commit 1182387

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

crates/project-model/src/build_scripts.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//! here, but it covers procedural macros as well.
88
99
use std::{
10+
cell::RefCell,
1011
io,
1112
path::PathBuf,
1213
process::{Command, Stdio},
@@ -107,15 +108,15 @@ impl WorkspaceBuildScripts {
107108
by_id.insert(workspace[package].id.clone(), package);
108109
}
109110

110-
let mut cfg_err = None;
111-
let mut stderr = String::new();
111+
let errors = RefCell::new(String::new());
112+
let push_err = |err: &str| {
113+
let mut e = errors.borrow_mut();
114+
e.push_str(err);
115+
e.push('\n');
116+
};
112117
let output = stdx::process::streaming_output(
113118
cmd,
114119
&mut |line| {
115-
if cfg_err.is_some() {
116-
return;
117-
}
118-
119120
// Copy-pasted from existing cargo_metadata. It seems like we
120121
// should be using serde_stacker here?
121122
let mut deserializer = serde_json::Deserializer::from_str(line);
@@ -135,7 +136,7 @@ impl WorkspaceBuildScripts {
135136
match cfg.parse::<CfgFlag>() {
136137
Ok(it) => acc.push(it),
137138
Err(err) => {
138-
cfg_err = Some(format!(
139+
push_err(&format!(
139140
"invalid cfg from cargo-metadata: {}",
140141
err
141142
));
@@ -177,15 +178,18 @@ impl WorkspaceBuildScripts {
177178
}
178179
Message::CompilerMessage(message) => {
179180
progress(message.target.name);
181+
182+
if let Some(diag) = message.message.rendered.as_deref() {
183+
push_err(diag);
184+
}
180185
}
181186
Message::BuildFinished(_) => {}
182187
Message::TextLine(_) => {}
183188
_ => {}
184189
}
185190
},
186191
&mut |line| {
187-
stderr.push_str(line);
188-
stderr.push('\n');
192+
push_err(line);
189193
},
190194
)?;
191195

@@ -205,16 +209,12 @@ impl WorkspaceBuildScripts {
205209
}
206210
}
207211

208-
if let Some(cfg_err) = cfg_err {
209-
stderr.push_str(&cfg_err);
210-
stderr.push('\n');
211-
}
212-
212+
let mut errors = errors.into_inner();
213213
if !output.status.success() {
214-
if stderr.is_empty() {
215-
stderr = "cargo check failed".to_string();
214+
if errors.is_empty() {
215+
errors = "cargo check failed".to_string();
216216
}
217-
res.error = Some(stderr)
217+
res.error = Some(errors);
218218
}
219219

220220
Ok(res)

0 commit comments

Comments
 (0)