aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-sat-resolver/src/rule_set_generator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart-sat-resolver/src/rule_set_generator.rs')
-rw-r--r--crates/mozart-sat-resolver/src/rule_set_generator.rs28
1 files changed, 24 insertions, 4 deletions
diff --git a/crates/mozart-sat-resolver/src/rule_set_generator.rs b/crates/mozart-sat-resolver/src/rule_set_generator.rs
index 39d28fd..bc56dff 100644
--- a/crates/mozart-sat-resolver/src/rule_set_generator.rs
+++ b/crates/mozart-sat-resolver/src/rule_set_generator.rs
@@ -13,8 +13,11 @@ pub struct RuleSetGenerator<'a> {
added_map: HashSet<PackageId>,
/// Package names → list of package IDs with that name (non-alias).
added_packages_by_name: HashMap<String, Vec<PackageId>>,
- /// Platform packages to ignore.
+ /// Specific platform packages to ignore (from `--ignore-platform-req=name`).
ignore_platform_reqs: HashSet<String>,
+ /// When true, every platform package is treated as ignored.
+ /// Mirrors `--ignore-platform-reqs` (no value).
+ ignore_all_platform_reqs: bool,
}
impl<'a> RuleSetGenerator<'a> {
@@ -25,6 +28,7 @@ impl<'a> RuleSetGenerator<'a> {
added_map: HashSet::new(),
added_packages_by_name: HashMap::new(),
ignore_platform_reqs: HashSet::new(),
+ ignore_all_platform_reqs: false,
}
}
@@ -33,6 +37,22 @@ impl<'a> RuleSetGenerator<'a> {
self.ignore_platform_reqs = names;
}
+ /// When set, every platform package is treated as ignored.
+ pub fn set_ignore_all_platform_reqs(&mut self, ignore_all: bool) {
+ self.ignore_all_platform_reqs = ignore_all;
+ }
+
+ fn is_ignored_platform_dep(&self, name: &str) -> bool {
+ if self
+ .ignore_platform_reqs
+ .iter()
+ .any(|p| mozart_core::matches_wildcard(name, p))
+ {
+ return true;
+ }
+ self.ignore_all_platform_reqs && mozart_core::platform::is_platform_package(name)
+ }
+
/// Generate rules for a set of requirements and fixed packages.
///
/// Port of Composer's RuleSetGenerator::getRulesFor.
@@ -60,7 +80,7 @@ impl<'a> RuleSetGenerator<'a> {
// Process root requirements
for (name, constraint) in requires {
- if self.ignore_platform_reqs.contains(name.as_str()) {
+ if self.is_ignored_platform_dep(name.as_str()) {
continue;
}
@@ -116,7 +136,7 @@ impl<'a> RuleSetGenerator<'a> {
// Process each requirement
for link in requires {
- if self.ignore_platform_reqs.contains(&link.target) {
+ if self.is_ignored_platform_dep(&link.target) {
continue;
}
@@ -168,7 +188,7 @@ impl<'a> RuleSetGenerator<'a> {
let conflicts = pkg.conflicts.clone();
for link in conflicts {
- if self.ignore_platform_reqs.contains(&link.target) {
+ if self.is_ignored_platform_dep(&link.target) {
continue;
}