|
1 | 1 | use { |
2 | | - crate::{instance::InstanceDescriptor, packages::Packages}, |
| 2 | + crate::{dependency_type::DependencyType, instance::InstanceDescriptor, packages::Packages}, |
3 | 3 | globset::{Glob, GlobMatcher}, |
| 4 | + log::error, |
| 5 | + std::process, |
4 | 6 | }; |
5 | 7 |
|
6 | 8 | #[derive(Clone, Debug)] |
@@ -70,30 +72,46 @@ impl GroupSelector { |
70 | 72 | } |
71 | 73 | } |
72 | 74 |
|
73 | | - pub fn can_add(&self, descriptor: &InstanceDescriptor) -> bool { |
74 | | - self.matches_dependency_types(descriptor) |
| 75 | + pub fn can_add(&self, all_dependency_types: &[DependencyType], descriptor: &InstanceDescriptor) -> bool { |
| 76 | + self.has_valid_dependency_types(all_dependency_types) |
| 77 | + && self.matches_dependency_types(descriptor) |
75 | 78 | && self.matches_packages(descriptor) |
76 | 79 | && self.matches_dependencies(descriptor) |
77 | 80 | && self.matches_specifier_types(descriptor) |
78 | 81 | } |
79 | 82 |
|
80 | | - pub fn matches_dependency_types(&self, descriptor: &InstanceDescriptor) -> bool { |
| 83 | + fn has_valid_dependency_types(&self, all_dependency_types: &[DependencyType]) -> bool { |
| 84 | + self |
| 85 | + .include_dependency_types |
| 86 | + .iter() |
| 87 | + .chain(self.exclude_dependency_types.iter()) |
| 88 | + .for_each(|expected| { |
| 89 | + if !all_dependency_types.iter().any(|actual| actual.name == *expected) { |
| 90 | + error!("dependencyType '{expected}' does not match any of syncpack or your customTypes"); |
| 91 | + error!("check your syncpack config file"); |
| 92 | + process::exit(1); |
| 93 | + } |
| 94 | + }); |
| 95 | + true |
| 96 | + } |
| 97 | + |
| 98 | + fn matches_dependency_types(&self, descriptor: &InstanceDescriptor) -> bool { |
81 | 99 | matches_identifiers( |
82 | 100 | &descriptor.dependency_type.name, |
83 | 101 | &self.include_dependency_types, |
84 | 102 | &self.exclude_dependency_types, |
85 | 103 | ) |
86 | 104 | } |
87 | 105 |
|
88 | | - pub fn matches_packages(&self, descriptor: &InstanceDescriptor) -> bool { |
| 106 | + fn matches_packages(&self, descriptor: &InstanceDescriptor) -> bool { |
89 | 107 | matches_globs(&descriptor.package.borrow().name, &self.include_packages, &self.exclude_packages) |
90 | 108 | } |
91 | 109 |
|
92 | | - pub fn matches_dependencies(&self, descriptor: &InstanceDescriptor) -> bool { |
| 110 | + fn matches_dependencies(&self, descriptor: &InstanceDescriptor) -> bool { |
93 | 111 | matches_globs(&descriptor.internal_name, &self.include_dependencies, &self.exclude_dependencies) |
94 | 112 | } |
95 | 113 |
|
96 | | - pub fn matches_specifier_types(&self, descriptor: &InstanceDescriptor) -> bool { |
| 114 | + fn matches_specifier_types(&self, descriptor: &InstanceDescriptor) -> bool { |
97 | 115 | self.include_specifier_types.is_empty() |
98 | 116 | || matches_identifiers( |
99 | 117 | &descriptor.specifier.get_config_identifier(), |
|
0 commit comments