fix(config): fix include patterns not being included when starting with an underscore. Fix #762
This commit is contained in:
parent
6c3bd577b6
commit
7baa668b7d
|
@ -35,8 +35,7 @@ use std::path::PathBuf;
|
||||||
use std::{collections::HashSet, path::Path};
|
use std::{collections::HashSet, path::Path};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
const STANDARD_INCLUDES: &[&str] = &["../match/**/*.yml"];
|
const STANDARD_INCLUDES: &[&str] = &["../match/**/[!_]*.yml"];
|
||||||
const STANDARD_EXCLUDES: &[&str] = &["../match/**/_*.yml"];
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub(crate) struct ResolvedConfig {
|
pub(crate) struct ResolvedConfig {
|
||||||
|
@ -445,12 +444,6 @@ impl ResolvedConfig {
|
||||||
fn aggregate_excludes(config: &ParsedConfig) -> HashSet<String> {
|
fn aggregate_excludes(config: &ParsedConfig) -> HashSet<String> {
|
||||||
let mut excludes = HashSet::new();
|
let mut excludes = HashSet::new();
|
||||||
|
|
||||||
if config.use_standard_includes.is_none() || config.use_standard_includes.unwrap() {
|
|
||||||
STANDARD_EXCLUDES.iter().for_each(|exclude| {
|
|
||||||
excludes.insert(exclude.to_string());
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(yaml_excludes) = config.excludes.as_ref() {
|
if let Some(yaml_excludes) = config.excludes.as_ref() {
|
||||||
yaml_excludes.iter().for_each(|exclude| {
|
yaml_excludes.iter().for_each(|exclude| {
|
||||||
excludes.insert(exclude.to_string());
|
excludes.insert(exclude.to_string());
|
||||||
|
@ -499,7 +492,7 @@ mod tests {
|
||||||
ResolvedConfig::aggregate_includes(&ParsedConfig {
|
ResolvedConfig::aggregate_includes(&ParsedConfig {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec!["../match/**/*.yml".to_string(),]
|
vec!["../match/**/[!_]*.yml".to_string(),]
|
||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<HashSet<_>>()
|
.collect::<HashSet<_>>()
|
||||||
|
@ -524,10 +517,13 @@ mod tests {
|
||||||
includes: Some(vec!["custom/*.yml".to_string()]),
|
includes: Some(vec!["custom/*.yml".to_string()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec!["../match/**/*.yml".to_string(), "custom/*.yml".to_string()]
|
vec![
|
||||||
.iter()
|
"../match/**/[!_]*.yml".to_string(),
|
||||||
.cloned()
|
"custom/*.yml".to_string()
|
||||||
.collect::<HashSet<_>>()
|
]
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.collect::<HashSet<_>>()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,10 +534,13 @@ mod tests {
|
||||||
extra_includes: Some(vec!["custom/*.yml".to_string()]),
|
extra_includes: Some(vec!["custom/*.yml".to_string()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec!["../match/**/*.yml".to_string(), "custom/*.yml".to_string()]
|
vec![
|
||||||
.iter()
|
"../match/**/[!_]*.yml".to_string(),
|
||||||
.cloned()
|
"custom/*.yml".to_string()
|
||||||
.collect::<HashSet<_>>()
|
]
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.collect::<HashSet<_>>()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,7 +553,7 @@ mod tests {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec![
|
vec![
|
||||||
"../match/**/*.yml".to_string(),
|
"../match/**/[!_]*.yml".to_string(),
|
||||||
"custom/*.yml".to_string(),
|
"custom/*.yml".to_string(),
|
||||||
"sub/*.yml".to_string()
|
"sub/*.yml".to_string()
|
||||||
]
|
]
|
||||||
|
@ -569,11 +568,9 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ResolvedConfig::aggregate_excludes(&ParsedConfig {
|
ResolvedConfig::aggregate_excludes(&ParsedConfig {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
})
|
||||||
vec!["../match/**/_*.yml".to_string(),]
|
.len(),
|
||||||
.iter()
|
0
|
||||||
.cloned()
|
|
||||||
.collect::<HashSet<_>>()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,7 +592,7 @@ mod tests {
|
||||||
excludes: Some(vec!["custom/*.yml".to_string()]),
|
excludes: Some(vec!["custom/*.yml".to_string()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec!["../match/**/_*.yml".to_string(), "custom/*.yml".to_string()]
|
vec!["custom/*.yml".to_string()]
|
||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<HashSet<_>>()
|
.collect::<HashSet<_>>()
|
||||||
|
@ -609,7 +606,7 @@ mod tests {
|
||||||
extra_excludes: Some(vec!["custom/*.yml".to_string()]),
|
extra_excludes: Some(vec!["custom/*.yml".to_string()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec!["../match/**/_*.yml".to_string(), "custom/*.yml".to_string()]
|
vec!["custom/*.yml".to_string()]
|
||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<HashSet<_>>()
|
.collect::<HashSet<_>>()
|
||||||
|
@ -624,14 +621,10 @@ mod tests {
|
||||||
extra_excludes: Some(vec!["custom/*.yml".to_string()]),
|
extra_excludes: Some(vec!["custom/*.yml".to_string()]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
vec![
|
vec!["custom/*.yml".to_string(), "sub/*.yml".to_string()]
|
||||||
"../match/**/_*.yml".to_string(),
|
.iter()
|
||||||
"custom/*.yml".to_string(),
|
.cloned()
|
||||||
"sub/*.yml".to_string()
|
.collect::<HashSet<_>>()
|
||||||
]
|
|
||||||
.iter()
|
|
||||||
.cloned()
|
|
||||||
.collect::<HashSet<_>>()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -758,6 +751,41 @@ mod tests {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn match_paths_generated_correctly_with_underscore_files() {
|
||||||
|
use_test_directory(|_, match_dir, config_dir| {
|
||||||
|
let sub_dir = match_dir.join("sub");
|
||||||
|
create_dir_all(&sub_dir).unwrap();
|
||||||
|
|
||||||
|
let base_file = match_dir.join("base.yml");
|
||||||
|
std::fs::write(&base_file, "test").unwrap();
|
||||||
|
let another_file = match_dir.join("another.yml");
|
||||||
|
std::fs::write(&another_file, "test").unwrap();
|
||||||
|
let under_file = match_dir.join("_sub.yml");
|
||||||
|
std::fs::write(&under_file, "test").unwrap();
|
||||||
|
let sub_file = sub_dir.join("sub.yml");
|
||||||
|
std::fs::write(&sub_file, "test").unwrap();
|
||||||
|
|
||||||
|
let config_file = config_dir.join("default.yml");
|
||||||
|
std::fs::write(&config_file, "extra_includes: ['../match/_sub.yml']").unwrap();
|
||||||
|
|
||||||
|
let config = ResolvedConfig::load(&config_file, None).unwrap();
|
||||||
|
|
||||||
|
let mut expected = vec![
|
||||||
|
base_file.to_string_lossy().to_string(),
|
||||||
|
another_file.to_string_lossy().to_string(),
|
||||||
|
sub_file.to_string_lossy().to_string(),
|
||||||
|
under_file.to_string_lossy().to_string(),
|
||||||
|
];
|
||||||
|
expected.sort();
|
||||||
|
|
||||||
|
let mut result = config.match_paths().to_vec();
|
||||||
|
result.sort();
|
||||||
|
|
||||||
|
assert_eq!(result, expected.as_slice());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn test_filter_is_match(config: &str, app: &AppProperties) -> bool {
|
fn test_filter_is_match(config: &str, app: &AppProperties) -> bool {
|
||||||
let mut result = false;
|
let mut result = false;
|
||||||
let result_ref = &mut result;
|
let result_ref = &mut result;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user