diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-23 01:25:49 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-23 01:57:21 +0900 |
| commit | 587a79ec395c3e7ed861b19099ffefefac64e3b5 (patch) | |
| tree | f9ef282a803e85c0fa4ea15288dacc0d776049e6 /crates/mozart/src/commands/init.rs | |
| parent | f421ddde23a3e285977c4f879d450ed3f9a34963 (diff) | |
| download | php-mozart-587a79ec395c3e7ed861b19099ffefefac64e3b5.tar.gz php-mozart-587a79ec395c3e7ed861b19099ffefefac64e3b5.tar.zst php-mozart-587a79ec395c3e7ed861b19099ffefefac64e3b5.zip | |
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 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/commands/init.rs')
| -rw-r--r-- | crates/mozart/src/commands/init.rs | 30 |
1 files changed, 21 insertions, 9 deletions
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 [<comment>yes</comment>]?" )) { 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<String> { - 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, } } |
