diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-03 20:40:56 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-03 20:40:56 +0900 |
| commit | 6ec10b18cfe2e473d71f8d786ae0d6a9877864ab (patch) | |
| tree | aa3b92efa514c228fb6c8864789d0853731c542f /crates/mozart/tests | |
| parent | 2bb4f62d0a7b98ea4b3195fbfefdd7b5f0aff19c (diff) | |
| download | php-mozart-6ec10b18cfe2e473d71f8d786ae0d6a9877864ab.tar.gz php-mozart-6ec10b18cfe2e473d71f8d786ae0d6a9877864ab.tar.zst php-mozart-6ec10b18cfe2e473d71f8d786ae0d6a9877864ab.zip | |
fix(install): align partial-update operation order with Composer
Three coordinated changes to make `update --with-dependencies` produce
the same operation trace Composer emits:
- LockFileGenerationRequest gains a previous_lock field. When a
resolved package matches an entry in the old lock at the same name +
version_normalized, its relationship-shaped fields (require /
require-dev / conflict / replace / provide / suggest) are carried
over verbatim. Source/dist refs and version-shaped fields still
refresh from upstream metadata so dev packages can still pick up new
commits. Without this carry-over, partial updates regenerated lock
entries from upstream COMPOSER repo definitions, which can declare
different requires than the lock — and topological_sort then sees a
graph Composer's transaction never built.
- Transaction's topological_sort and get_root_packages now expand
replace/provide targets when matching `require` links to result
packages, mirroring Composer's getProvidersInResult. Previously a
package was only treated as required when matched by its own name,
so packages reached only via replace/provide were mis-classified as
roots and the DFS stack visited deps in the wrong order.
- compute_operations iterates installed.json in reverse when emitting
removals, mirroring Composer's array_unshift onto operations. Two
co-orphaned packages otherwise emit removals in the wrong order vs
Composer's trace.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/tests')
| -rw-r--r-- | crates/mozart/tests/installer.rs | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/crates/mozart/tests/installer.rs b/crates/mozart/tests/installer.rs index f6324b6..06c7581 100644 --- a/crates/mozart/tests/installer.rs +++ b/crates/mozart/tests/installer.rs @@ -373,10 +373,7 @@ installer_fixture!(update_allow_list_with_dependencies_alias, ignore); installer_fixture!(update_allow_list_with_dependencies_new_requirement); installer_fixture!(update_allow_list_with_dependencies_require_new); installer_fixture!(update_allow_list_with_dependencies_require_new_replace); -installer_fixture!( - update_allow_list_with_dependencies_require_new_replace_mutual, - ignore -); +installer_fixture!(update_allow_list_with_dependencies_require_new_replace_mutual); installer_fixture!(update_allow_list_with_dependency_conflict); installer_fixture!(update_changes_url, ignore); installer_fixture!(update_dev_ignores_providers); @@ -403,7 +400,7 @@ installer_fixture!(update_picks_up_change_of_vcs_type); installer_fixture!(update_prefer_lowest_stable); installer_fixture!(update_reference); installer_fixture!(update_reference_picks_latest); -installer_fixture!(update_removes_unused_locked_dep, ignore); +installer_fixture!(update_removes_unused_locked_dep); installer_fixture!(update_requiring_decision_reverts_and_learning_positive_literals); installer_fixture!(update_security_advisory_matching_direct_dependency, ignore); installer_fixture!( |
