diff --git a/guide/src/cli/init.md b/guide/src/cli/init.md index 9256d860..962f564c 100644 --- a/guide/src/cli/init.md +++ b/guide/src/cli/init.md @@ -76,3 +76,7 @@ mdbook init --ignore=git ``` [building]: build.md + +#### --force + +Skip the prompts to create a `.gitignore` and for the title for the book. diff --git a/src/cmd/init.rs b/src/cmd/init.rs index d8ce93d1..3a60d975 100644 --- a/src/cmd/init.rs +++ b/src/cmd/init.rs @@ -56,7 +56,7 @@ pub fn execute(args: &ArgMatches) -> Result<()> { "git" => builder.create_gitignore(true), _ => builder.create_gitignore(false), }; - } else { + } else if !args.get_flag("force") { println!("\nDo you want a .gitignore to be created? (y/n)"); if confirm() { builder.create_gitignore(true); @@ -65,6 +65,8 @@ pub fn execute(args: &ArgMatches) -> Result<()> { config.book.title = if args.contains_id("title") { args.get_one::("title").map(String::from) + } else if args.get_flag("force") { + None } else { request_book_title() }; diff --git a/tests/cli/init.rs b/tests/cli/init.rs new file mode 100644 index 00000000..6bd12274 --- /dev/null +++ b/tests/cli/init.rs @@ -0,0 +1,24 @@ +use crate::cli::cmd::mdbook_cmd; +use crate::dummy_book::DummyBook; + +use mdbook::config::Config; + +/// Run `mdbook init` with `--force` to skip the confirmation prompts +#[test] +fn base_mdbook_init_can_skip_confirmation_prompts() { + let temp = DummyBook::new().build().unwrap(); + + // doesn't exist before + assert!(!temp.path().join("book").exists()); + + let mut cmd = mdbook_cmd(); + cmd.args(["init", "--force"]).current_dir(temp.path()); + cmd.assert() + .success() + .stdout(predicates::str::contains("\nAll done, no errors...\n")); + + let config = Config::from_disk(temp.path().join("book.toml")).unwrap(); + assert_eq!(config.book.title, None); + + assert!(!temp.path().join(".gitignore").exists()); +} diff --git a/tests/cli/mod.rs b/tests/cli/mod.rs index 989f443f..152b4ee9 100644 --- a/tests/cli/mod.rs +++ b/tests/cli/mod.rs @@ -1,3 +1,4 @@ mod build; mod cmd; +mod init; mod test;