Skip to content

Commit

Permalink
Start shipping the Cargo book
Browse files Browse the repository at this point in the history
Fixes #44910
Fixes #39588

See both of those bugs for more details.
  • Loading branch information
steveklabnik committed Nov 14, 2017
1 parent 24840da commit 623886f
Showing 1 changed file with 43 additions and 45 deletions.
88 changes: 43 additions & 45 deletions src/bootstrap/doc.rs
Expand Up @@ -132,6 +132,49 @@ impl Step for UnstableBook {
}
}

#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct CargoBook {
target: Interned<String>,
name: Interned<String>,
src: Interned<PathBuf>,
}

impl Step for CargoBook {
type Output = ();
const DEFAULT: bool = true;

fn should_run(run: ShouldRun) -> ShouldRun {
let builder = run.builder;
run.path("src/tools/cargo/src/doc/book").default_condition(builder.build.config.docs)
}

fn make_run(run: RunConfig) {
run.builder.ensure(CargoBook {
target: run.target,
name: INTERNER.intern_str("cargo"),
src: INTERNER.intern_path(PathBuf::from("src/tools/cargo/src/doc/book")),
});
}

fn run(self, builder: &Builder) {
let build = builder.build;
let target = self.target;
let name = self.name;
let src = self.src;
let out = build.doc_out(target);
t!(fs::create_dir_all(&out));

let out = out.join(name);
println!("Cargo Book ({}) - {}", target, name);
let _ = fs::remove_dir_all(&out);
build.run(builder.tool_cmd(Tool::Rustbook)
.arg("build")
.arg(&src)
.arg("-d")
.arg(out));
}
}

#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
struct RustbookSrc {
target: Interned<String>,
Expand Down Expand Up @@ -240,51 +283,6 @@ impl Step for TheBook {
}
}

#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct CargoBook {
target: Interned<String>,
}

impl Step for CargoBook {
type Output = ();
const DEFAULT: bool = true;

fn should_run(run: ShouldRun) -> ShouldRun {
let builder = run.builder;
run.path("src/doc/cargo").default_condition(builder.build.config.docs)
}

fn make_run(run: RunConfig) {
run.builder.ensure(CargoBook {
target: run.target,
});
}

/// Create a placeholder for the cargo documentation so that doc.rust-lang.org/cargo will
/// redirect to doc.crates.io. We want to publish doc.rust-lang.org/cargo in the paper
/// version of the book, but we don't want to rush the process of switching cargo's docs
/// over to mdbook and deploying them. When the cargo book is ready, this implementation
/// should build the mdbook instead of this redirect page.
fn run(self, builder: &Builder) {
let build = builder.build;
let out = build.doc_out(self.target);

let cargo_dir = out.join("cargo");
t!(fs::create_dir_all(&cargo_dir));

let index = cargo_dir.join("index.html");
let redirect_html = r#"
<html>
<head>
<meta http-equiv="refresh" content="0; URL='http://doc.crates.io'" />
</head>
</html>"#;

println!("Creating cargo book redirect page");
t!(t!(File::create(&index)).write_all(redirect_html.as_bytes()));
}
}

fn invoke_rustdoc(builder: &Builder, compiler: Compiler, target: Interned<String>, markdown: &str) {
let build = builder.build;
let out = build.doc_out(target);
Expand Down

0 comments on commit 623886f

Please sign in to comment.