equal
deleted
inserted
replaced
15 filepatterns::{ |
15 filepatterns::{ |
16 build_single_regex, filter_subincludes, get_patterns_from_file, |
16 build_single_regex, filter_subincludes, get_patterns_from_file, |
17 PatternFileWarning, PatternResult, |
17 PatternFileWarning, PatternResult, |
18 }, |
18 }, |
19 utils::{ |
19 utils::{ |
20 files::find_dirs, |
20 files::{dir_ancestors, find_dirs}, |
21 hg_path::{HgPath, HgPathBuf, HgPathError}, |
21 hg_path::{HgPath, HgPathBuf, HgPathError}, |
22 Escaped, |
22 Escaped, |
23 }, |
23 }, |
24 DirsMultiset, FastHashMap, IgnorePattern, PatternError, PatternSyntax, |
24 DirsMultiset, FastHashMap, IgnorePattern, PatternError, PatternSyntax, |
25 }; |
25 }; |
352 |
352 |
353 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
353 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { |
354 if self.prefix && self.files.contains(directory) { |
354 if self.prefix && self.files.contains(directory) { |
355 return VisitChildrenSet::Recursive; |
355 return VisitChildrenSet::Recursive; |
356 } |
356 } |
357 let path_or_parents_in_set = find_dirs(directory) |
357 let path_or_parents_in_set = dir_ancestors(directory) |
358 .any(|parent_dir| self.files.contains(parent_dir)); |
358 .any(|parent_dir| self.files.contains(parent_dir)); |
359 if self.dirs.contains(directory) || path_or_parents_in_set { |
359 if self.dirs.contains(directory) || path_or_parents_in_set { |
360 VisitChildrenSet::This |
360 VisitChildrenSet::This |
361 } else { |
361 } else { |
362 VisitChildrenSet::Empty |
362 VisitChildrenSet::Empty |
2296 } |
2296 } |
2297 |
2297 |
2298 #[test] |
2298 #[test] |
2299 fn test_pattern_matcher_visit_children_set() { |
2299 fn test_pattern_matcher_visit_children_set() { |
2300 let tree = make_example_tree(); |
2300 let tree = make_example_tree(); |
2301 let _pattern_dir1_glob_c = |
2301 let pattern_dir1_glob_c = |
2302 PatternMatcher::new(vec![IgnorePattern::new( |
2302 PatternMatcher::new(vec![IgnorePattern::new( |
2303 PatternSyntax::Glob, |
2303 PatternSyntax::Glob, |
2304 b"dir1/*.c", |
2304 b"dir1/*.c", |
2305 Path::new(""), |
2305 Path::new(""), |
2306 )]) |
2306 )]) |
2325 b"*.c", |
2325 b"*.c", |
2326 Path::new(""), |
2326 Path::new(""), |
2327 )]) |
2327 )]) |
2328 .unwrap() |
2328 .unwrap() |
2329 }; |
2329 }; |
2330 // // TODO: re-enable this test when the corresponding bug is |
|
2331 // fixed if false { |
|
2332 // tree.check_matcher(&pattern_dir1_glob_c); |
|
2333 // } |
|
2334 let files = vec![HgPathBuf::from_bytes(b"dir/subdir/b.txt")]; |
2330 let files = vec![HgPathBuf::from_bytes(b"dir/subdir/b.txt")]; |
2335 let file_dir_subdir_b = FileMatcher::new(files).unwrap(); |
2331 let file_dir_subdir_b = FileMatcher::new(files).unwrap(); |
2336 |
2332 |
2337 let files = vec![ |
2333 let files = vec![ |
2338 HgPathBuf::from_bytes(b"file.txt"), |
2334 HgPathBuf::from_bytes(b"file.txt"), |
2391 .unwrap(), |
2387 .unwrap(), |
2392 ]; |
2388 ]; |
2393 |
2389 |
2394 tree.check_matcher(&pattern_dir1(), 25); |
2390 tree.check_matcher(&pattern_dir1(), 25); |
2395 tree.check_matcher(&pattern_dir1_a, 1); |
2391 tree.check_matcher(&pattern_dir1_a, 1); |
|
2392 tree.check_matcher(&pattern_dir1_glob_c, 2); |
2396 tree.check_matcher(&pattern_relglob_c(), 14); |
2393 tree.check_matcher(&pattern_relglob_c(), 14); |
2397 tree.check_matcher(&AlwaysMatcher, 112); |
2394 tree.check_matcher(&AlwaysMatcher, 112); |
2398 tree.check_matcher(&NeverMatcher, 0); |
2395 tree.check_matcher(&NeverMatcher, 0); |
2399 tree.check_matcher( |
2396 tree.check_matcher( |
2400 &IntersectionMatcher::new( |
2397 &IntersectionMatcher::new( |