diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-03 13:14:00 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-03 13:14:00 +0900 |
| commit | 3c0527aa63574f17c9f372b6187d5690e0cbaff0 (patch) | |
| tree | 8159e09b685f7faf2870970d465b9698093b8973 /crates/mozart/tests | |
| parent | c53dfc52f6449c8d5ca0b160a2a25f99790711f2 (diff) | |
| download | php-mozart-3c0527aa63574f17c9f372b6187d5690e0cbaff0.tar.gz php-mozart-3c0527aa63574f17c9f372b6187d5690e0cbaff0.tar.zst php-mozart-3c0527aa63574f17c9f372b6187d5690e0cbaff0.zip | |
fix(resolver): apply root "X as Y" aliases via pool second pass
Mirrors Composer's `RootPackageLoader::extractAliases` +
`PoolBuilder::loadPackage` flow: strip the `as` clause from each root
require so the SAT side sees only the LEFT-hand constraint, and after
every package is loaded run a second pass that materializes an alias
entry for any input matching `(name, version_normalized)`. Locked-only
packages in a partial update are excluded via a new
`ResolveRequest::locked_package_names` so they don't pick up the alias
(`propagateUpdate=false` in Composer).
Two adjacent fixes uncovered while making `install_aliased_alias`
green:
- `Version::cmp` treated unnamed wildcard branches (`1.0.x-dev`,
`is_dev_branch=true && name=None`) as below every numeric version.
They are semantically the same as the four-segment `*-dev` form
Composer's `normalizeBranch` emits, so let only *named* branches
take the shortcut.
- `Constraint::Exact` / `NotEqual` used the derived `==`, which
compared `is_dev_branch` field-by-field and missed the
wildcard/numeric equivalence. Switch to `cmp` so both forms count
as equal.
- `Pool::matches_package` now falls back to parsing `pretty_version`
when the `version` parse doesn't match the constraint, so a
`dev-master` query lines up with a pool entry stored as the
internal `9999999.x.x.x-dev` expansion.
Net effect on installer fixtures: `install_aliased_alias` newly
green, plus `aliased_priority`, `aliased_priority_conflicting`, and
`install_dev_using_dist` come along for the ride.
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 | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/crates/mozart/tests/installer.rs b/crates/mozart/tests/installer.rs index 6ab083d..b4eb512 100644 --- a/crates/mozart/tests/installer.rs +++ b/crates/mozart/tests/installer.rs @@ -223,8 +223,8 @@ installer_fixture!(alias_on_unloadable_package); installer_fixture!(alias_solver_problems); installer_fixture!(alias_solver_problems2); installer_fixture!(alias_with_reference, ignore); -installer_fixture!(aliased_priority, ignore); -installer_fixture!(aliased_priority_conflicting, ignore); +installer_fixture!(aliased_priority); +installer_fixture!(aliased_priority_conflicting); installer_fixture!(aliases_with_require_dev, ignore); installer_fixture!(broken_deps_do_not_replace, ignore); installer_fixture!(circular_dependency, ignore); @@ -255,10 +255,10 @@ installer_fixture!(github_issues_8903, ignore); installer_fixture!(github_issues_9012, ignore); installer_fixture!(github_issues_9290, ignore); installer_fixture!(hint_main_rename); -installer_fixture!(install_aliased_alias, ignore); +installer_fixture!(install_aliased_alias); installer_fixture!(install_branch_alias_composer_repo); installer_fixture!(install_dev); -installer_fixture!(install_dev_using_dist, ignore); +installer_fixture!(install_dev_using_dist); installer_fixture!(install_forces_reinstall_if_abandon_changes, ignore); installer_fixture!(install_from_incomplete_lock); installer_fixture!(install_from_incomplete_lock_with_ignore, ignore); |
