aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-22 15:59:35 +0900
committernsfisis <nsfisis@gmail.com>2026-02-22 15:59:35 +0900
commitbae2d1f87f6984b9e8929dc538d9c1d37a26e638 (patch)
treecd5ec615fb85db16d77cb6f5dcc64e53edd8afca /crates/mozart
parentd34f2ba41cb1d0111a4682f9d65628e06f46ff31 (diff)
downloadphp-mozart-bae2d1f87f6984b9e8929dc538d9c1d37a26e638.tar.gz
php-mozart-bae2d1f87f6984b9e8929dc538d9c1d37a26e638.tar.zst
php-mozart-bae2d1f87f6984b9e8929dc538d9c1d37a26e638.zip
fix(install): fall back to update when composer.lock is missing
Match Composer behavior: instead of failing with an error when no composer.lock is present, show a warning and delegate to the update command to resolve dependencies from composer.json. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart')
-rw-r--r--crates/mozart/src/commands/install.rs40
1 files changed, 37 insertions, 3 deletions
diff --git a/crates/mozart/src/commands/install.rs b/crates/mozart/src/commands/install.rs
index d55ba72..6f8cbe3 100644
--- a/crates/mozart/src/commands/install.rs
+++ b/crates/mozart/src/commands/install.rs
@@ -536,12 +536,46 @@ pub async fn execute(
}
// Step 3: Read composer.lock
+ // If no lock file present, fall back to update (matching Composer behavior).
let lock_path = working_dir.join("composer.lock");
if !lock_path.exists() {
- return Err(mozart_core::exit_code::bail(
- mozart_core::exit_code::LOCK_FILE_INVALID,
- "No composer.lock file present. Run \"mozart update\" to generate one.",
+ console.info(&console::warning(
+ "No composer.lock file present. Updating dependencies to latest instead of installing from lock file.",
));
+ let update_args = super::update::UpdateArgs {
+ packages: vec![],
+ with: vec![],
+ prefer_source: args.prefer_source,
+ prefer_dist: args.prefer_dist,
+ prefer_install: args.prefer_install.clone(),
+ dry_run: args.dry_run,
+ dev: args.dev,
+ no_dev: args.no_dev,
+ lock: false,
+ no_install: false,
+ no_audit: !args.audit,
+ audit_format: args.audit_format.clone(),
+ no_security_blocking: args.no_security_blocking,
+ no_autoloader: args.no_autoloader,
+ no_suggest: args.no_suggest,
+ no_progress: args.no_progress,
+ with_dependencies: false,
+ with_all_dependencies: false,
+ optimize_autoloader: args.optimize_autoloader,
+ classmap_authoritative: args.classmap_authoritative,
+ apcu_autoloader: args.apcu_autoloader,
+ apcu_autoloader_prefix: args.apcu_autoloader_prefix.clone(),
+ ignore_platform_req: args.ignore_platform_req.clone(),
+ ignore_platform_reqs: args.ignore_platform_reqs,
+ prefer_stable: false,
+ prefer_lowest: false,
+ minimal_changes: false,
+ patch_only: false,
+ interactive: false,
+ root_reqs: false,
+ bump_after_update: None,
+ };
+ return super::update::execute(&update_args, cli, console).await;
}
let lock = lockfile::LockFile::read_from_file(&lock_path)?;