aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-03 19:46:20 +0900
committernsfisis <nsfisis@gmail.com>2026-05-03 19:46:20 +0900
commit7057b2332cbad8934c3bfcded70566ce8dc16963 (patch)
treea00a7ee76d612d7bf025890db18230e8012af9be /crates/mozart
parent031b7e0bdf6fc021dbc16fd86d403bda42c90e7b (diff)
downloadphp-mozart-7057b2332cbad8934c3bfcded70566ce8dc16963.tar.gz
php-mozart-7057b2332cbad8934c3bfcded70566ce8dc16963.tar.zst
php-mozart-7057b2332cbad8934c3bfcded70566ce8dc16963.zip
fix(install): honour config.allow-missing-requirements
Composer's Installer::doInstall prints the missing-requirement warnings and continues when config.allow-missing-requirements is true, rather than bailing with ERROR_LOCK_FILE_INVALID. Mozart was always bailing, diverging on the install-from-incomplete-lock-with-ignore fixture. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart')
-rw-r--r--crates/mozart/src/commands/install.rs18
-rw-r--r--crates/mozart/tests/installer.rs2
2 files changed, 16 insertions, 4 deletions
diff --git a/crates/mozart/src/commands/install.rs b/crates/mozart/src/commands/install.rs
index 62a7d21..7a5ebe9 100644
--- a/crates/mozart/src/commands/install.rs
+++ b/crates/mozart/src/commands/install.rs
@@ -1204,9 +1204,21 @@ pub async fn run(
for line in &missing {
console.info(line);
}
- return Err(mozart_core::exit_code::bail_silent(
- mozart_core::exit_code::LOCK_FILE_INVALID,
- ));
+ // Mirrors `Composer\Installer::doInstall()` lines 749-756: when
+ // `config.allow-missing-requirements` is true, print the warnings
+ // but proceed with what the lock already covers instead of
+ // bailing with ERROR_LOCK_FILE_INVALID.
+ let allow_missing = root_pkg
+ .extra_fields
+ .get("config")
+ .and_then(|v| v.get("allow-missing-requirements"))
+ .and_then(|v| v.as_bool())
+ .unwrap_or(false);
+ if !allow_missing {
+ return Err(mozart_core::exit_code::bail_silent(
+ mozart_core::exit_code::LOCK_FILE_INVALID,
+ ));
+ }
}
let platform_problems = collect_install_platform_problems(
diff --git a/crates/mozart/tests/installer.rs b/crates/mozart/tests/installer.rs
index 7767f55..c411c10 100644
--- a/crates/mozart/tests/installer.rs
+++ b/crates/mozart/tests/installer.rs
@@ -261,7 +261,7 @@ installer_fixture!(install_dev);
installer_fixture!(install_dev_using_dist);
installer_fixture!(install_forces_reinstall_if_abandon_changes);
installer_fixture!(install_from_incomplete_lock);
-installer_fixture!(install_from_incomplete_lock_with_ignore, ignore);
+installer_fixture!(install_from_incomplete_lock_with_ignore);
installer_fixture!(install_from_lock_removes_package);
installer_fixture!(install_funding_notice);
installer_fixture!(install_funding_notice_env);