Skip to content

Commit

Permalink
Auto merge of rust-lang#89182 - GuillaumeGomez:boostrap-explicit-requ…
Browse files Browse the repository at this point in the history
…est, r=Mark-Simulacrum

Simplify explicit request check and allow to run "doc src/librustdoc" even without config set

Originally I wanted to allow the command `doc src/librustdoc` to work when passed explicitly but then `@Mark-Simulacrum` recommended me to generalize it, so here we are!

r? `@Mark-Simulacrum`
  • Loading branch information
bors committed Sep 27, 2021
2 parents c81c3ea + 10bef56 commit 04006d8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 17 deletions.
16 changes: 16 additions & 0 deletions src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1617,6 +1617,22 @@ impl<'a> Builder<'a> {
// Only execute if it's supposed to run as default
if desc.default && should_run.is_really_default() { self.ensure(step) } else { None }
}

/// Checks if any of the "should_run" paths is in the `Builder` paths.
pub(crate) fn was_invoked_explicitly<S: Step>(&'a self) -> bool {
let desc = StepDescription::from::<S>();
let should_run = (desc.should_run)(ShouldRun::new(self));

for path in &self.paths {
if should_run.paths.iter().any(|s| s.has(path))
&& !desc.is_excluded(self, &PathSet::Suite(path.clone()))
{
return true;
}
}

false
}
}

#[cfg(test)]
Expand Down
31 changes: 14 additions & 17 deletions src/bootstrap/doc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,18 +102,10 @@ fn open(builder: &Builder<'_>, path: impl AsRef<Path>) {
// Used for deciding whether a particular step is one requested by the user on
// the `x.py doc` command line, which determines whether `--open` will open that
// page.
fn components_simplified(path: &PathBuf) -> Vec<&str> {
pub(crate) fn components_simplified(path: &PathBuf) -> Vec<&str> {
path.iter().map(|component| component.to_str().unwrap_or("???")).collect()
}

fn is_explicit_request(builder: &Builder<'_>, path: &str) -> bool {
builder
.paths
.iter()
.map(components_simplified)
.any(|requested| requested.iter().copied().eq(path.split('/')))
}

#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct UnstableBook {
target: TargetSelection,
Expand Down Expand Up @@ -248,7 +240,7 @@ impl Step for TheBook {
invoke_rustdoc(builder, compiler, target, path);
}

if is_explicit_request(builder, "src/doc/book") {
if builder.was_invoked_explicitly::<Self>() {
let out = builder.doc_out(target);
let index = out.join("book").join("index.html");
open(builder, &index);
Expand Down Expand Up @@ -408,7 +400,7 @@ impl Step for Standalone {

// We open doc/index.html as the default if invoked as `x.py doc --open`
// with no particular explicit doc requested (e.g. library/core).
if builder.paths.is_empty() || is_explicit_request(builder, "src/doc") {
if builder.paths.is_empty() || builder.was_invoked_explicitly::<Self>() {
let index = out.join("index.html");
open(builder, &index);
}
Expand Down Expand Up @@ -553,7 +545,6 @@ impl Step for Rustc {
fn run(self, builder: &Builder<'_>) {
let stage = self.stage;
let target = self.target;
let mut is_explicit_request = false;
builder.info(&format!("Documenting stage{} compiler ({})", stage, target));

let paths = builder
Expand All @@ -562,15 +553,14 @@ impl Step for Rustc {
.map(components_simplified)
.filter_map(|path| {
if path.get(0) == Some(&"compiler") {
is_explicit_request = true;
path.get(1).map(|p| p.to_owned())
} else {
None
}
})
.collect::<Vec<_>>();

if !builder.config.compiler_docs && !is_explicit_request {
if !builder.config.compiler_docs && !builder.was_invoked_explicitly::<Self>() {
builder.info("\tskipping - compiler/librustdoc docs disabled");
return;
}
Expand Down Expand Up @@ -700,15 +690,22 @@ macro_rules! tool_doc {
fn run(self, builder: &Builder<'_>) {
let stage = self.stage;
let target = self.target;
builder.info(&format!("Documenting stage{} {} ({})", stage, stringify!($tool).to_lowercase(), target));
builder.info(
&format!(
"Documenting stage{} {} ({})",
stage,
stringify!($tool).to_lowercase(),
target,
),
);

// This is the intended out directory for compiler documentation.
let out = builder.compiler_doc_out(target);
t!(fs::create_dir_all(&out));

let compiler = builder.compiler(stage, builder.config.build);

if !builder.config.compiler_docs {
if !builder.config.compiler_docs && !builder.was_invoked_explicitly::<Self>() {
builder.info("\tskipping - compiler/tool docs disabled");
return;
}
Expand Down Expand Up @@ -913,7 +910,7 @@ impl Step for RustcBook {
name: INTERNER.intern_str("rustc"),
src: INTERNER.intern_path(out_base),
});
if is_explicit_request(builder, "src/doc/rustc") {
if builder.was_invoked_explicitly::<Self>() {
let out = builder.doc_out(self.target);
let index = out.join("rustc").join("index.html");
open(builder, &index);
Expand Down

0 comments on commit 04006d8

Please sign in to comment.