Skip to content

copy doc output files by format #104286

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 23, 2022
Merged
Show file tree
Hide file tree
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
8 changes: 7 additions & 1 deletion src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1345,7 +1345,13 @@ impl<'a> Builder<'a> {
let my_out = match mode {
// This is the intended out directory for compiler documentation.
Mode::Rustc | Mode::ToolRustc => self.compiler_doc_out(target),
Mode::Std => out_dir.join(target.triple).join("doc"),
Mode::Std => {
if self.config.cmd.json() {
out_dir.join(target.triple).join("json-doc")
} else {
out_dir.join(target.triple).join("doc")
}
}
_ => panic!("doc mode {:?} not expected", mode),
};
let rustdoc = self.rustdoc(compiler);
Expand Down
21 changes: 8 additions & 13 deletions src/bootstrap/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -564,27 +564,22 @@ fn doc_std(
);
}
let compiler = builder.compiler(stage, builder.config.build);

let target_doc_dir_name = if format == DocumentationFormat::JSON { "json-doc" } else { "doc" };
let target_dir =
builder.stage_out(compiler, Mode::Std).join(target.triple).join(target_doc_dir_name);

// This is directory where the compiler will place the output of the command.
// We will then copy the files from this directory into the final `out` directory, the specified
// as a function parameter.
let out_dir = builder.stage_out(compiler, Mode::Std).join(target.triple).join("doc");
// `cargo` uses the same directory for both JSON docs and HTML docs.
// This could lead to cross-contamination when copying files into the specified `out` directory.
// For example:
// ```bash
// x doc std
// x doc std --json
// ```
// could lead to HTML docs being copied into the JSON docs output directory.
// To avoid this issue, we clean the doc folder before invoking `cargo`.
if out_dir.exists() {
builder.remove_dir(&out_dir);
}
let out_dir = target_dir.join(target.triple).join("doc");

let run_cargo_rustdoc_for = |package: &str| {
let mut cargo = builder.cargo(compiler, Mode::Std, SourceType::InTree, target, "rustdoc");
compile::std_cargo(builder, target, compiler.stage, &mut cargo);
cargo
.arg("--target-dir")
.arg(&*target_dir.to_string_lossy())
.arg("-p")
.arg(package)
.arg("-Zskip-rustdoc-fingerprint")
Expand Down
36 changes: 36 additions & 0 deletions src/test/run-make/rustdoc-verify-output-files/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
include ../../run-make-fulldeps/tools.mk

OUTPUT_DIR := "$(TMPDIR)/rustdoc"
TMP_OUTPUT_DIR := "$(TMPDIR)/tmp-rustdoc"

all:
# Generate html docs
$(RUSTDOC) src/lib.rs --crate-name foobar --crate-type lib --out-dir $(OUTPUT_DIR)

# Copy first output for to check if it's exactly same after second compilation
cp -R $(OUTPUT_DIR) $(TMP_OUTPUT_DIR)

# Generate html docs once again on same output
$(RUSTDOC) src/lib.rs --crate-name foobar --crate-type lib --out-dir $(OUTPUT_DIR)

# Check if everything exactly same
$(DIFF) -r -q $(OUTPUT_DIR) $(TMP_OUTPUT_DIR)

# Generate json doc on the same output
$(RUSTDOC) src/lib.rs --crate-name foobar --crate-type lib --out-dir $(OUTPUT_DIR) -Z unstable-options --output-format json

# Check if expected json file is generated
[ -e $(OUTPUT_DIR)/foobar.json ]

# TODO
# We should re-generate json doc once again and compare the diff with previously
# generated one. Because layout of json docs changes in each compilation, we can't
# do that currently.
#
# See https://github.com/rust-lang/rust/issues/103785#issuecomment-1307425590 for details.

# remove generated json doc
rm $(OUTPUT_DIR)/foobar.json

# Check if json doc compilation broke any of the html files generated previously
$(DIFF) -r -q $(OUTPUT_DIR) $(TMP_OUTPUT_DIR)
1 change: 1 addition & 0 deletions src/test/run-make/rustdoc-verify-output-files/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// nothing to see here