Skip to content

Commit b219427

Browse files
committed
Auto merge of #654 - Enselic:rustdocflags, r=Mark-Simulacrum
Allow to specify `RUSTDOCFLAGS` independently Currently, if you to run this experiment: ``` cargo run -- define-ex --ex rustdoc-json-broken --mode rustdoc \ --cap-lints warn --crate-select list:serde \ "nightly-2022-06-01+rustflags=-Z unstable-options --output-format json" \ "nightly+rustflags=-Z unstable-options --output-format json" \ ``` crater will mix up `RUSTFLAGS` and `RUSTDOCFLAGS` and you will get the following error: ``` [INFO] [stderr] process didn't exit successfully: `rustc - --crate-name ___ \ --print=file-names --cap-lints=warn -Z unstable-options --output-format json \ --crate-type bin --crate-type rlib --crate-type dylib --crate-type cdylib \ --crate-type staticlib --crate-type proc-macro --print=sysroot --print=cfg` \ (exit status: 1) [INFO] [stderr] --- stderr [INFO] [stderr] error: Unrecognized option: 'output-format' ``` Solve this by allowing `rustdoc` and `rustdocflags` to be specified independently. After this change, this works without unexpected errors: ``` cargo run -- define-ex --ex rustdoc-json-ice --mode rustdoc \ --cap-lints warn --crate-select list:serde \ "nightly-2022-06-01+rustdocflags=-Z unstable-options --output-format json" \ "nightly+rustdocflags=-Z unstable-options --output-format json" ``` Not sure if this change breaks compatibility in some way, but it seems like a rather generic and future-proof solution to me.
2 parents a082ad4 + 885ec83 commit b219427

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

src/runner/test.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ fn run_cargo<DB: WriteResults>(
9999
rustflags.push_str(tc_rustflags);
100100
}
101101

102-
let rustflags_env = if let Some(&"doc") = args.first() {
103-
"RUSTDOCFLAGS"
104-
} else {
105-
"RUSTFLAGS"
106-
};
102+
let mut rustdocflags = format!("--cap-lints={}", ctx.experiment.cap_lints.to_str());
103+
if let Some(ref tc_rustdocflags) = ctx.toolchain.rustdocflags {
104+
rustdocflags.push(' ');
105+
rustdocflags.push_str(tc_rustdocflags);
106+
}
107107

108108
let mut did_ice = false;
109109
let mut did_network = false;
@@ -170,7 +170,8 @@ fn run_cargo<DB: WriteResults>(
170170
.args(&args)
171171
.env("CARGO_INCREMENTAL", "0")
172172
.env("RUST_BACKTRACE", "full")
173-
.env(rustflags_env, rustflags);
173+
.env("RUSTFLAGS", rustflags)
174+
.env("RUSTDOCFLAGS", rustdocflags);
174175
for (var, data) in env {
175176
command = command.env(var, data);
176177
}

src/server/routes/webhooks/commands.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,15 @@ pub fn run(
7272
detected_start = Some(Toolchain {
7373
source: RustwideToolchain::ci(&build.base_sha, false),
7474
rustflags: None,
75+
rustdocflags: None,
7576
cargoflags: None,
7677
ci_try: false,
7778
patches: Vec::new(),
7879
});
7980
detected_end = Some(Toolchain {
8081
source: RustwideToolchain::ci(&build.merge_sha, false),
8182
rustflags: None,
83+
rustdocflags: None,
8284
cargoflags: None,
8385
ci_try: true,
8486
patches: Vec::new(),

src/toolchain.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ lazy_static! {
1010
pub(crate) static ref MAIN_TOOLCHAIN: Toolchain = Toolchain {
1111
source: RustwideToolchain::dist("stable"),
1212
rustflags: None,
13+
rustdocflags: None,
1314
cargoflags: None,
1415
ci_try: false,
1516
patches: Vec::new(),
@@ -19,6 +20,7 @@ lazy_static! {
1920
pub(crate) static ref TEST_TOOLCHAIN: Toolchain = Toolchain {
2021
source: RustwideToolchain::dist("beta"),
2122
rustflags: None,
23+
rustdocflags: None,
2224
cargoflags: None,
2325
ci_try: false,
2426
patches: Vec::new(),
@@ -29,6 +31,7 @@ lazy_static! {
2931
pub struct Toolchain {
3032
pub source: RustwideToolchain,
3133
pub rustflags: Option<String>,
34+
pub rustdocflags: Option<String>,
3235
pub cargoflags: Option<String>,
3336
pub ci_try: bool,
3437
pub patches: Vec<CratePatch>,
@@ -68,6 +71,10 @@ impl fmt::Display for Toolchain {
6871
write!(f, "+rustflags={}", flag)?;
6972
}
7073

74+
if let Some(ref flag) = self.rustdocflags {
75+
write!(f, "+rustdocflags={}", flag)?;
76+
}
77+
7178
if let Some(ref flag) = self.cargoflags {
7279
write!(f, "+cargoflags={}", flag)?;
7380
}
@@ -121,6 +128,7 @@ impl FromStr for Toolchain {
121128
};
122129

123130
let mut rustflags = None;
131+
let mut rustdocflags = None;
124132
let mut cargoflags = None;
125133
let mut patches: Vec<CratePatch> = vec![];
126134
for part in parts {
@@ -134,6 +142,7 @@ impl FromStr for Toolchain {
134142

135143
match flag {
136144
"rustflags" => rustflags = Some(value),
145+
"rustdocflags" => rustdocflags = Some(value),
137146
"cargoflags" => cargoflags = Some(value),
138147
"patch" => patches.push(value.parse()?),
139148
unknown => return Err(ToolchainParseError::InvalidFlag(unknown.to_string())),
@@ -146,6 +155,7 @@ impl FromStr for Toolchain {
146155
Ok(Toolchain {
147156
source,
148157
rustflags,
158+
rustdocflags,
149159
cargoflags,
150160
ci_try,
151161
patches,
@@ -199,6 +209,7 @@ mod tests {
199209
test_from_str!($str => Toolchain {
200210
source: $source,
201211
rustflags: None,
212+
rustdocflags: None,
202213
cargoflags: None,
203214
ci_try: $ci_try,
204215
patches: Vec::new(),
@@ -208,6 +219,17 @@ mod tests {
208219
test_from_str!(concat!($str, "+rustflags=foo bar") => Toolchain {
209220
source: $source,
210221
rustflags: Some("foo bar".to_string()),
222+
rustdocflags: None,
223+
cargoflags: None,
224+
ci_try: $ci_try,
225+
patches: Vec::new(),
226+
});
227+
228+
// Test parsing with rustdocflags
229+
test_from_str!(concat!($str, "+rustdocflags=-Zunstable-options -wjson") => Toolchain {
230+
source: $source,
231+
rustflags: None,
232+
rustdocflags: Some("-Zunstable-options -wjson".to_string()),
211233
cargoflags: None,
212234
ci_try: $ci_try,
213235
patches: Vec::new(),
@@ -217,6 +239,7 @@ mod tests {
217239
test_from_str!(concat!($str, "+cargoflags=foo bar") => Toolchain {
218240
source: $source,
219241
rustflags: None,
242+
rustdocflags: None,
220243
cargoflags: Some("foo bar".to_string()),
221244
ci_try: $ci_try,
222245
patches: Vec::new(),
@@ -226,6 +249,7 @@ mod tests {
226249
test_from_str!(concat!($str, "+patch=example=https://git.example.com/some/repo=master") => Toolchain {
227250
source: $source,
228251
rustflags: None,
252+
rustdocflags: None,
229253
cargoflags: None,
230254
ci_try: $ci_try,
231255
patches: vec![CratePatch {
@@ -239,6 +263,7 @@ mod tests {
239263
test_from_str!(concat!($str, "+rustflags=foo bar+patch=example=https://git.example.com/some/repo=master") => Toolchain {
240264
source: $source,
241265
rustflags: Some("foo bar".to_string()),
266+
rustdocflags: None,
242267
cargoflags: None,
243268
ci_try: $ci_try,
244269
patches: vec![CratePatch {
@@ -291,6 +316,8 @@ mod tests {
291316
assert!(Toolchain::from_str("foo#0000000000000000000000000000000000000000").is_err());
292317
assert!(Toolchain::from_str("stable+rustflags").is_err());
293318
assert!(Toolchain::from_str("stable+rustflags=").is_err());
319+
assert!(Toolchain::from_str("stable+rustdocflags").is_err());
320+
assert!(Toolchain::from_str("stable+rustdocflags=").is_err());
294321
assert!(Toolchain::from_str("stable+donotusethisflag=ever").is_err());
295322
assert!(Toolchain::from_str("stable+patch=").is_err())
296323
}

0 commit comments

Comments
 (0)