diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-03 19:46:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-03 19:46:20 +0900 |
| commit | 7057b2332cbad8934c3bfcded70566ce8dc16963 (patch) | |
| tree | a00a7ee76d612d7bf025890db18230e8012af9be | |
| parent | 031b7e0bdf6fc021dbc16fd86d403bda42c90e7b (diff) | |
| download | php-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>
| -rw-r--r-- | crates/mozart/src/commands/install.rs | 18 | ||||
| -rw-r--r-- | crates/mozart/tests/installer.rs | 2 |
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); |
