diff options
| -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); |
