diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-02 11:19:09 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-02 11:19:09 +0900 |
| commit | b216124157b69edc7330291214a6043c555f0ade (patch) | |
| tree | 13794ed3f158af0b01fc438548723e533eda4300 /crates/mozart-registry | |
| parent | 2ff728fe6796506be0e6b640ccb85ed3e1ce2b56 (diff) | |
| download | php-mozart-b216124157b69edc7330291214a6043c555f0ade.tar.gz php-mozart-b216124157b69edc7330291214a6043c555f0ade.tar.zst php-mozart-b216124157b69edc7330291214a6043c555f0ade.zip | |
feat(resolver): honor --ignore-platform-reqs and wildcard patterns
The pool builder and rule-set generator only consulted an exact-match
HashSet, so `--ignore-platform-reqs` (no value) and `--ignore-platform-req=ext-foo-*`
fell through to the SAT layer and produced "no matching package found"
for transitive platform deps. Track the bool flag separately and run
each platform name through `mozart_core::matches_wildcard` against the
configured patterns.
Unblocks four installer fixtures:
install-{ignore-platform-package-requirement-wildcard,ignore-platform-package-requirements}
update-{ignore-platform-package-requirement-wildcard,ignore-platform-package-requirements}.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-registry')
| -rw-r--r-- | crates/mozart-registry/src/resolver.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/crates/mozart-registry/src/resolver.rs b/crates/mozart-registry/src/resolver.rs index 7aab6b2..710a9c4 100644 --- a/crates/mozart-registry/src/resolver.rs +++ b/crates/mozart-registry/src/resolver.rs @@ -231,7 +231,9 @@ fn should_skip_platform_dep( if ignore_platform_reqs { return true; } - ignore_platform_req_list.iter().any(|p| p == dep_name) + ignore_platform_req_list + .iter() + .any(|p| mozart_core::matches_wildcard(dep_name, p)) } // ───────────────────────────────────────────────────────────────────────────── @@ -412,13 +414,11 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R // Set up ignore list for platform requirements let mut ignore_set: HashSet<String> = HashSet::new(); - if request.ignore_platform_reqs { - // We'll skip platform deps in the loop below - } for name in &request.ignore_platform_req_list { ignore_set.insert(name.clone()); } builder.set_ignore_platform_reqs(ignore_set.clone()); + builder.set_ignore_all_platform_reqs(request.ignore_platform_reqs); // Add platform packages as fixed entries let platform_config = request.platform.to_versions(); @@ -560,6 +560,7 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R // Generate rules let mut generator = RuleSetGenerator::new(&mut pool); generator.set_ignore_platform_reqs(ignore_set); + generator.set_ignore_all_platform_reqs(request.ignore_platform_reqs); let rules = generator.generate(&root_requires, &fixed_ids); // Create policy and solve |
