Skip to content

Commit 8f89b8a

Browse files
committed
Read docs.rs metadata when running rustdoc
1 parent a15793e commit 8f89b8a

File tree

3 files changed

+37
-11
lines changed

3 files changed

+37
-11
lines changed

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ chrono-humanize = "0.0.11"
2020
crates-index = "0.12"
2121
crossbeam-utils = "0.5"
2222
csv = "1.0.2"
23+
docsrs-metadata = { git = "https://github.com/rust-lang/docs.rs/" }
2324
dotenv = "0.13"
2425
error-chain = "0.12"
2526
failure = "0.1.3"

src/runner/test.rs

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ use crate::runner::tasks::TaskCtx;
66
use crate::runner::OverrideResult;
77
use cargo_metadata::diagnostic::DiagnosticLevel;
88
use cargo_metadata::{Message, Metadata, PackageId};
9+
use docsrs_metadata::Metadata as DocsrsMetadata;
910
use failure::Error;
1011
use remove_dir_all::remove_dir_all;
1112
use rustwide::cmd::{CommandError, ProcessLinesActions, SandboxBuilder};
1213
use rustwide::{Build, PrepareError};
13-
use std::collections::{BTreeSet, HashSet};
14+
use std::collections::{BTreeSet, HashMap, HashSet};
1415
use std::convert::TryFrom;
1516

1617
fn failure_reason(err: &Error) -> FailureReason {
@@ -80,8 +81,9 @@ fn run_cargo<DB: WriteResults>(
8081
args: &[&str],
8182
check_errors: bool,
8283
local_packages_id: &HashSet<PackageId>,
84+
mut env: HashMap<&'static str, String>,
8385
) -> Fallible<()> {
84-
let mut rustflags = format!("--cap-lints={}", ctx.experiment.cap_lints.to_str());
86+
let mut rustflags = format!(" --cap-lints={}", ctx.experiment.cap_lints.to_str());
8587
if let Some(ref tc_rustflags) = ctx.toolchain.rustflags {
8688
rustflags.push(' ');
8789
rustflags.push_str(tc_rustflags);
@@ -92,6 +94,7 @@ fn run_cargo<DB: WriteResults>(
9294
} else {
9395
"RUSTFLAGS"
9496
};
97+
env.entry(rustflags_env).or_default().push_str(&rustflags);
9598

9699
let mut did_ice = false;
97100
let mut error_codes = BTreeSet::new();
@@ -146,8 +149,10 @@ fn run_cargo<DB: WriteResults>(
146149
.cargo()
147150
.args(args)
148151
.env("CARGO_INCREMENTAL", "0")
149-
.env("RUST_BACKTRACE", "full")
150-
.env(rustflags_env, rustflags);
152+
.env("RUST_BACKTRACE", "full");
153+
for (var, data) in env {
154+
command = command.env(var, data);
155+
}
151156

152157
if check_errors {
153158
command = command.process_lines(&mut detect_error);
@@ -238,13 +243,15 @@ fn build<DB: WriteResults>(
238243
&["build", "--frozen", "--message-format=json"],
239244
true,
240245
local_packages_id,
246+
HashMap::default(),
241247
)?;
242248
run_cargo(
243249
ctx,
244250
build_env,
245251
&["test", "--frozen", "--no-run", "--message-format=json"],
246252
true,
247253
local_packages_id,
254+
HashMap::default(),
248255
)?;
249256
Ok(())
250257
}
@@ -256,6 +263,7 @@ fn test<DB: WriteResults>(ctx: &TaskCtx<DB>, build_env: &Build) -> Fallible<()>
256263
&["test", "--frozen"],
257264
false,
258265
&HashSet::new(),
266+
HashMap::default(),
259267
)
260268
}
261269

@@ -308,6 +316,7 @@ pub(super) fn test_check_only<DB: WriteResults>(
308316
],
309317
true,
310318
local_packages_id,
319+
HashMap::default(),
311320
) {
312321
Ok(TestResult::BuildFail(failure_reason(&err)))
313322
} else {
@@ -332,6 +341,7 @@ pub(super) fn test_clippy_only<DB: WriteResults>(
332341
],
333342
true,
334343
local_packages_id,
344+
HashMap::default(),
335345
) {
336346
Ok(TestResult::BuildFail(failure_reason(&err)))
337347
} else {
@@ -344,18 +354,21 @@ pub(super) fn test_rustdoc<DB: WriteResults>(
344354
build_env: &Build,
345355
local_packages_id: &HashSet<PackageId>,
346356
) -> Fallible<TestResult> {
357+
let src = build_env.host_source_dir();
358+
let metadata = DocsrsMetadata::from_crate_root(src)?;
359+
let cargo_args = metadata.cargo_args();
360+
assert_eq!(cargo_args[0], "doc");
361+
let mut cargo_args: Vec<_> = cargo_args.iter().map(|s| s.as_str()).collect();
362+
cargo_args.push("frozen");
363+
cargo_args.push("--message-format=json");
364+
347365
let res = run_cargo(
348366
ctx,
349367
build_env,
350-
&[
351-
"doc",
352-
"--frozen",
353-
"--no-deps",
354-
"--document-private-items",
355-
"--message-format=json",
356-
],
368+
&cargo_args,
357369
true,
358370
local_packages_id,
371+
metadata.environment_variables(),
359372
);
360373

361374
// Make sure to remove the built documentation

0 commit comments

Comments
 (0)