From c6e81337fb9f6c965713e6c4e719ee7c5adea101 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Mon, 17 Apr 2017 21:53:27 -0400 Subject: [PATCH] Implement new 'no-create' build flag. Fixes https://github.com/azerupi/mdBook/issues/253. --- src/bin/mdbook.rs | 5 +++++ src/book/mod.rs | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/bin/mdbook.rs b/src/bin/mdbook.rs index 09d5421a..3af3ada4 100644 --- a/src/bin/mdbook.rs +++ b/src/bin/mdbook.rs @@ -63,6 +63,7 @@ fn main() { .about("Build the book from the markdown files") .arg_from_usage("-o, --open 'Open the compiled book in a web browser'") .arg_from_usage("-d, --dest-dir=[dest-dir] 'The output directory for your book{n}(Defaults to ./book when omitted)'") + .arg_from_usage("--no-create 'Will not create non-existent files linked from SUMMARY.md'") .arg_from_usage("[dir] 'A directory for your book{n}(Defaults to Current Directory when omitted)'")) .subcommand(SubCommand::with_name("watch") .about("Watch the files for changes") @@ -174,6 +175,10 @@ fn build(args: &ArgMatches) -> Result<(), Box> { None => book }; + if args.is_present("no-create") { + book.create_missing = false; + } + try!(book.build()); if args.is_present("open") { diff --git a/src/book/mod.rs b/src/book/mod.rs index 210436fe..2b56160e 100644 --- a/src/book/mod.rs +++ b/src/book/mod.rs @@ -32,6 +32,10 @@ pub struct MDBook { renderer: Box, livereload: Option, + + /// Should `mdbook build` create files referenced from SUMMARY.md if they + /// don't exist + pub create_missing: bool, } impl MDBook { @@ -79,6 +83,7 @@ impl MDBook { renderer: Box::new(HtmlHandlebars::new()), livereload: None, + create_missing: true, } } @@ -183,6 +188,9 @@ impl MDBook { let path = self.src.join(&ch.path); if !path.exists() { + if !self.create_missing { + return Err(format!("'{}' referenced from SUMMARY.md does not exist.", path.to_string_lossy()).into()); + } debug!("[*]: {:?} does not exist, trying to create file", path); try!(::std::fs::create_dir_all(path.parent().unwrap())); let mut f = try!(File::create(path));