diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-22 19:35:40 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-22 19:35:40 +0900 |
| commit | 3eefbbe8839315b53171523bf43fa65bde41803c (patch) | |
| tree | 3e90e2e6d1d12c3b5c66bec31c8f881fbb107fbd /crates/mozart-registry/src/resolver.rs | |
| parent | ffebc0e87572fead11d4a37bd110dc103b1b7b6b (diff) | |
| download | php-mozart-3eefbbe8839315b53171523bf43fa65bde41803c.tar.gz php-mozart-3eefbbe8839315b53171523bf43fa65bde41803c.tar.zst php-mozart-3eefbbe8839315b53171523bf43fa65bde41803c.zip | |
fix(resolver): handle virtual packages and deduplicate pool exploration
Virtual/meta packages (e.g. "psr/http-client-implementation") don't
exist on Packagist and caused a fatal error during transitive dependency
exploration. These packages are resolved via provides/replaces from
other packages already in the pool, so 404 errors are now skipped.
Also fix PoolBuilder::next_pending() repeatedly returning the same
virtual package name by tracking explored names in a HashSet, since
virtual packages are never added to inputs and the old check
(inputs.any(name)) never matched them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-registry/src/resolver.rs')
| -rw-r--r-- | crates/mozart-registry/src/resolver.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/crates/mozart-registry/src/resolver.rs b/crates/mozart-registry/src/resolver.rs index 66864f7..3e0936f 100644 --- a/crates/mozart-registry/src/resolver.rs +++ b/crates/mozart-registry/src/resolver.rs @@ -467,14 +467,18 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R continue; } - let versions = handle - .block_on(packagist::fetch_package_versions( - &name, - repo_cache.as_ref(), - )) - .map_err(|e| { - ResolveError::DependencyFetchError(format!("Failed to fetch {}: {}", name, e)) - })?; + let versions = match handle.block_on(packagist::fetch_package_versions( + &name, + repo_cache.as_ref(), + )) { + Ok(v) => v, + Err(_) => { + // Virtual/meta packages (e.g. "psr/http-client-implementation") + // don't exist on Packagist. They are resolved via provides/replaces + // from other packages already in the pool. + continue; + } + }; for pv in &versions { let inputs = |
