diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-22 15:59:35 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-22 15:59:35 +0900 |
| commit | bae2d1f87f6984b9e8929dc538d9c1d37a26e638 (patch) | |
| tree | cd5ec615fb85db16d77cb6f5dcc64e53edd8afca /crates/mozart/src/commands/install.rs | |
| parent | d34f2ba41cb1d0111a4682f9d65628e06f46ff31 (diff) | |
| download | php-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/src/commands/install.rs')
| -rw-r--r-- | crates/mozart/src/commands/install.rs | 40 |
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)?; |
