aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-23 01:36:10 +0900
committernsfisis <nsfisis@gmail.com>2026-02-23 01:57:52 +0900
commit331fa7911dd41938f84fd9ea9ea5d9793a6563c8 (patch)
tree53f37728734909ad22c44766e383786f8c63df04 /crates/mozart/src/commands
parent9ef46a76b1d0c85e7a45de3874ca203a86dad567 (diff)
downloadphp-mozart-331fa7911dd41938f84fd9ea9ea5d9793a6563c8.tar.gz
php-mozart-331fa7911dd41938f84fd9ea9ea5d9793a6563c8.tar.zst
php-mozart-331fa7911dd41938f84fd9ea9ea5d9793a6563c8.zip
fix(reinstall): add per-pattern warnings, config autoloader defaults, and COMPOSER_DEV_MODE
Emit per-pattern warnings for unmatched package names, read optimize-autoloader/classmap-authoritative/apcu-autoloader from composer.json config section, and set COMPOSER_DEV_MODE env var. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/commands')
-rw-r--r--crates/mozart/src/commands/reinstall.rs50
1 files changed, 47 insertions, 3 deletions
diff --git a/crates/mozart/src/commands/reinstall.rs b/crates/mozart/src/commands/reinstall.rs
index c6df20d..1665786 100644
--- a/crates/mozart/src/commands/reinstall.rs
+++ b/crates/mozart/src/commands/reinstall.rs
@@ -1,4 +1,6 @@
use clap::Args;
+use mozart_core::console_format;
+use mozart_core::package;
use std::path::PathBuf;
#[derive(Args)]
@@ -134,6 +136,21 @@ pub async fn execute(
filter_by_names(&candidates, &args.packages)
};
+ // Emit per-pattern warnings for patterns that matched no installed packages.
+ if has_packages {
+ for pattern in &args.packages {
+ let matched = candidates
+ .iter()
+ .any(|pkg| glob_matches(&pattern.to_lowercase(), &pkg.name.to_lowercase()));
+ if !matched {
+ console.info(&console_format!(
+ "<warning>Pattern \"{}\" does not match any currently installed packages.</warning>",
+ pattern
+ ));
+ }
+ }
+ }
+
if selected.is_empty() {
eprintln!("Found no packages to reinstall, aborting.");
std::process::exit(1);
@@ -232,17 +249,44 @@ pub async fn execute(
console.info("Generating autoload files");
let dev_mode = !args.no_dev && installed.dev;
+
+ // SAFETY: single-threaded at this point; no concurrent env access
+ unsafe {
+ std::env::set_var("COMPOSER_DEV_MODE", if dev_mode { "1" } else { "0" });
+ }
+
let suffix = lock.content_hash.clone();
+ // Read composer.json config section for autoloader defaults.
+ let composer_path = working_dir.join("composer.json");
+ let raw = package::read_from_file(&composer_path)?;
+ let project_config = raw.extra_fields.get("config");
+ let config_optimize = project_config
+ .and_then(|c| c.get("optimize-autoloader"))
+ .and_then(|v| v.as_bool())
+ .unwrap_or(false);
+ let config_classmap_auth = project_config
+ .and_then(|c| c.get("classmap-authoritative"))
+ .and_then(|v| v.as_bool())
+ .unwrap_or(false);
+ let config_apcu = project_config
+ .and_then(|c| c.get("apcu-autoloader"))
+ .and_then(|v| v.as_bool())
+ .unwrap_or(false);
+
+ let optimize = args.optimize_autoloader || config_optimize;
+ let classmap_auth = args.classmap_authoritative || config_classmap_auth;
+ let apcu = args.apcu_autoloader || args.apcu_autoloader_prefix.is_some() || config_apcu;
+
let _result =
mozart_autoload::autoload::generate(&mozart_autoload::autoload::AutoloadConfig {
project_dir: working_dir.to_path_buf(),
vendor_dir: vendor_dir.to_path_buf(),
dev_mode,
suffix,
- classmap_authoritative: args.classmap_authoritative,
- optimize: args.optimize_autoloader,
- apcu: args.apcu_autoloader,
+ classmap_authoritative: classmap_auth,
+ optimize,
+ apcu,
apcu_prefix: args.apcu_autoloader_prefix.clone(),
strict_psr: false,
strict_ambiguous: false,