From 623886f44c9c741a318b34b06f12e0a50997532b Mon Sep 17 00:00:00 2001 From: steveklabnik Date: Wed, 1 Nov 2017 15:21:55 -0400 Subject: [PATCH 1/2] Start shipping the Cargo book Fixes #44910 Fixes #39588 See both of those bugs for more details. --- src/bootstrap/doc.rs | 88 ++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index 16e8ee182bd8e..cb9698f168b23 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -132,6 +132,49 @@ impl Step for UnstableBook { } } +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub struct CargoBook { + target: Interned, + name: Interned, + src: Interned, +} + +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, @@ -240,51 +283,6 @@ impl Step for TheBook { } } -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub struct CargoBook { - target: Interned, -} - -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#" - - - - - "#; - - 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, markdown: &str) { let build = builder.build; let out = build.doc_out(target); From 3b32a3a104732004ca1b9e40a38221dd1cf3eb7f Mon Sep 17 00:00:00 2001 From: steveklabnik Date: Wed, 1 Nov 2017 15:24:35 -0400 Subject: [PATCH 2/2] link the cargo book into the bookshelf --- src/bootstrap/doc.rs | 9 ++++++--- src/doc/index.md | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index cb9698f168b23..4cbbcd2ebd80a 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -136,7 +136,6 @@ impl Step for UnstableBook { pub struct CargoBook { target: Interned, name: Interned, - src: Interned, } impl Step for CargoBook { @@ -152,21 +151,25 @@ impl Step for CargoBook { 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 src = PathBuf::from("src/tools/cargo/src/doc/book"); + 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) diff --git a/src/doc/index.md b/src/doc/index.md index bfd09145baafa..3784cc3c4b497 100644 --- a/src/doc/index.md +++ b/src/doc/index.md @@ -28,6 +28,7 @@ Rust provides a number of book-length sets of documentation, collectively nicknamed 'The Rust Bookshelf.' * [The Rust Programming Language][book] teaches you how to program in Rust. +* [The Cargo Book][cargo-book] is a guide to Cargo, Rust's build tool and dependency manager. * [The Unstable Book][unstable-book] has documentation for unstable features. * [The Rustonomicon][nomicon] is your guidebook to the dark arts of unsafe Rust. * [The Reference][ref] is not a formal spec, but is more detailed and comprehensive than the book. @@ -53,4 +54,5 @@ before this policy was put into place. That work is being tracked [nomicon]: nomicon/index.html [unstable-book]: unstable-book/index.html [rustdoc-book]: rustdoc/index.html +[cargo-book]: cargo/index.html