diff options
Diffstat (limited to 'crates/mozart-registry')
| -rw-r--r-- | crates/mozart-registry/src/lockfile.rs | 1 | ||||
| -rw-r--r-- | crates/mozart-registry/src/resolver.rs | 18 |
2 files changed, 18 insertions, 1 deletions
diff --git a/crates/mozart-registry/src/lockfile.rs b/crates/mozart-registry/src/lockfile.rs index 447e2cf..77a6b4c 100644 --- a/crates/mozart-registry/src/lockfile.rs +++ b/crates/mozart-registry/src/lockfile.rs @@ -1405,6 +1405,7 @@ mod tests { raw_repositories: vec![], root_provide: IndexMap::new(), root_replace: IndexMap::new(), + root_conflict: IndexMap::new(), }; let resolved = resolve(&resolve_request) diff --git a/crates/mozart-registry/src/resolver.rs b/crates/mozart-registry/src/resolver.rs index adc8780..48db7c3 100644 --- a/crates/mozart-registry/src/resolver.rs +++ b/crates/mozart-registry/src/resolver.rs @@ -611,6 +611,13 @@ pub struct ResolveRequest { /// Root composer.json's `replace` map. Same role as `root_provide` for the /// `replace` link: a replaced target counts as fulfilled by the root. pub root_replace: IndexMap<String, String>, + /// Root composer.json's `conflict` map (target → constraint). Composer's + /// `RootPackageRepository` carries these onto the in-pool root package + /// entry; the SAT generator then forbids any candidate matching the + /// constraint, so a root `conflict` blocks both direct selection of the + /// targeted version and any alias / replace / provide that would resolve + /// to it. + pub root_conflict: IndexMap<String, String>, } /// A single package in the resolution output. @@ -776,7 +783,15 @@ pub async fn resolve(request: &ResolveRequest) -> Result<Vec<ResolvedPackage>, R source: root_name_lower.clone(), }) .collect(), - conflicts: vec![], + conflicts: request + .root_conflict + .iter() + .map(|(target, constraint)| PoolLink { + target: target.to_lowercase(), + constraint: constraint.clone(), + source: root_name_lower.clone(), + }) + .collect(), is_fixed: true, is_alias_of: None, }; @@ -1410,6 +1425,7 @@ mod tests { raw_repositories: vec![], root_provide: IndexMap::new(), root_replace: IndexMap::new(), + root_conflict: IndexMap::new(), }; let result = resolve(&request).await; |
