Repository: rust-lang/mdBook (language: rust)

Issue:
`mdbook init --title <title>` fails to include title if git user name is not configured
### Problem

`mdbook init --title <title>` fails to include title if git user name is not configured

### Steps

1. inside some environment that doesn't have git user name configured
2. `mdbook init --title <title>`
3. `cat book.toml`, the title is not there
4. do the above again after configuring git user name, the title is there now


### Possible Solution(s)

Seems that there is a line in `init.rs` that only adds the config to the builder if the git user name is configured, even though it does a check before that for the title.

### Notes

_No response_

### Version

```text
0.4.42
```


Discussion / hints:

Fix patch:
diff --git a/src/cmd/init.rs b/src/cmd/init.rs
index 2c6415b6d9..f15fb96865 100644
--- a/src/cmd/init.rs
+++ b/src/cmd/init.rs
@@ -74,9 +74,9 @@ pub fn execute(args: &ArgMatches) -> Result<()> {
     if let Some(author) = get_author_name() {
         debug!("Obtained user name from gitconfig: {:?}", author);
         config.book.authors.push(author);
-        builder.with_config(config);
     }
 
+    builder.with_config(config);
     builder.build()?;
     println!("\nAll done, no errors...");
 


Test patch:
diff --git a/tests/cli/init.rs b/tests/cli/init.rs
index 6bd1227437..51c2bfa389 100644
--- a/tests/cli/init.rs
+++ b/tests/cli/init.rs
@@ -22,3 +22,26 @@ fn base_mdbook_init_can_skip_confirmation_prompts() {
 
     assert!(!temp.path().join(".gitignore").exists());
 }
+
+/// Run `mdbook init` with `--title` without git config.
+///
+/// Regression test for https://github.com/rust-lang/mdBook/issues/2485
+#[test]
+fn no_git_config_with_title() {
+    let temp = DummyBook::new().build().unwrap();
+
+    // doesn't exist before
+    assert!(!temp.path().join("book").exists());
+
+    let mut cmd = mdbook_cmd();
+    cmd.args(["init", "--title", "Example title"])
+        .current_dir(temp.path())
+        .env("GIT_CONFIG_GLOBAL", "")
+        .env("GIT_CONFIG_NOSYSTEM", "1");
+    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.as_deref(), Some("Example title"));
+}