From 587a79ec395c3e7ed861b19099ffefefac64e3b5 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 23 Feb 2026 01:25:49 +0900 Subject: fix(init): support COMPOSER_DEFAULT_* env vars and fix abort handling - Add COMPOSER_DEFAULT_VENDOR env var support for package name default - Swap USERNAME/USER check order to match Composer (matters on Windows) - Add COMPOSER_DEFAULT_AUTHOR/COMPOSER_DEFAULT_EMAIL env var support - Require both name and email for author (Composer behavior) - Use bail_silent for abort to prevent double error message Co-Authored-By: Claude Opus 4.6 --- crates/mozart/src/commands/init.rs | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'crates') diff --git a/crates/mozart/src/commands/init.rs b/crates/mozart/src/commands/init.rs index dc32c7c..15ec531 100644 --- a/crates/mozart/src/commands/init.rs +++ b/crates/mozart/src/commands/init.rs @@ -101,7 +101,9 @@ pub async fn execute( "Do you confirm generation [yes]?" )) { console.error("Command aborted"); - bail!("Command aborted"); + return Err(mozart_core::exit_code::bail_silent( + mozart_core::exit_code::GENERAL_ERROR, + )); } } else { console.info(&format!("Writing {}", composer_file.display())); @@ -623,9 +625,12 @@ fn get_default_package_name(working_dir: &Path) -> String { .unwrap_or("project"); let name = validation::sanitize_package_name_component(dir_name); - let vendor = get_git_config_value("github.user") - .or_else(|| std::env::var("USER").ok()) - .or_else(|| std::env::var("USERNAME").ok()) + let vendor = std::env::var("COMPOSER_DEFAULT_VENDOR") + .ok() + .filter(|v| !v.is_empty()) + .or_else(|| get_git_config_value("github.user")) + .or_else(|| std::env::var("USERNAME").ok().filter(|v| !v.is_empty())) + .or_else(|| std::env::var("USER").ok().filter(|v| !v.is_empty())) .map(|v| validation::sanitize_package_name_component(&v)) .unwrap_or_else(|| name.clone()); @@ -633,12 +638,19 @@ fn get_default_package_name(working_dir: &Path) -> String { } fn get_default_author() -> Option { - let name = get_git_config_value("user.name")?; - let email = get_git_config_value("user.email"); + let name = std::env::var("COMPOSER_DEFAULT_AUTHOR") + .ok() + .filter(|v| !v.is_empty()) + .or_else(|| get_git_config_value("user.name")); + + let email = std::env::var("COMPOSER_DEFAULT_EMAIL") + .ok() + .filter(|v| !v.is_empty()) + .or_else(|| get_git_config_value("user.email")); - match email { - Some(email) => Some(format!("{name} <{email}>")), - None => Some(name), + match (name, email) { + (Some(n), Some(e)) => Some(format!("{n} <{e}>")), + _ => None, } } -- cgit v1.3.1