Skip to content

Commit

Permalink
Sort ignore_dirs before building GlobSet (#223)
Browse files Browse the repository at this point in the history
This is needed to work around BurntSushi/ripgrep#1079.
  • Loading branch information
calixteman authored and marco-c committed Oct 30, 2018
1 parent 4ad0dbc commit 131f66f
Showing 1 changed file with 56 additions and 41 deletions.
97 changes: 56 additions & 41 deletions src/path_rewriting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,10 +175,15 @@ pub fn rewrite_paths(
source_dir: Option<PathBuf>,
prefix_dir: Option<PathBuf>,
ignore_not_existing: bool,
to_ignore_dirs: Vec<String>,
mut to_ignore_dirs: Vec<String>,
filter_option: Option<bool>,
) -> CovResultIter {
let mut glob_builder = GlobSetBuilder::new();

// workaround for bug: https://github.com/BurntSushi/ripgrep/issues/1079
// Some filters foo/* are ignored when not sorted
to_ignore_dirs.sort_unstable();

for to_ignore_dir in to_ignore_dirs {
glob_builder.add(Glob::new(&to_ignore_dir).unwrap());
}
Expand Down Expand Up @@ -533,53 +538,63 @@ mod tests {
#[cfg(unix)]
#[test]
fn test_rewrite_paths_ignore_multiple_directories() {
let mut result_map: CovResultMap = HashMap::new();
result_map.insert("main.cpp".to_string(), empty_result!());
result_map.insert("mydir/prova.h".to_string(), empty_result!());
result_map.insert("mydir2/prova.h".to_string(), empty_result!());
let results = rewrite_paths(
result_map,
None,
None,
None,
false,
vec!["mydir/*".to_string(), "mydir2/*".to_string()],
None,
);
let mut count = 0;
for (abs_path, rel_path, result) in results {
count += 1;
assert_eq!(abs_path, PathBuf::from("main.cpp"));
assert_eq!(rel_path, PathBuf::from("main.cpp"));
assert_eq!(result, empty_result!());
let mut ignore_dirs = vec!["mydir/*".to_string(), "mydir2/*".to_string()];
for _ in 0..2 {
// we run the test twice, one with ignore_dirs and the other with ignore_dirs.reverse()
let mut result_map: CovResultMap = HashMap::new();
result_map.insert("main.cpp".to_string(), empty_result!());
result_map.insert("mydir/prova.h".to_string(), empty_result!());
result_map.insert("mydir2/prova.h".to_string(), empty_result!());
let results = rewrite_paths(
result_map,
None,
None,
None,
false,
ignore_dirs.clone(),
None,
);
let mut count = 0;
for (abs_path, rel_path, result) in results {
count += 1;
assert_eq!(abs_path, PathBuf::from("main.cpp"));
assert_eq!(rel_path, PathBuf::from("main.cpp"));
assert_eq!(result, empty_result!());
}
assert_eq!(count, 1);
ignore_dirs.reverse();
}
assert_eq!(count, 1);
}

#[cfg(windows)]
#[test]
fn test_rewrite_paths_ignore_multiple_directories() {
let mut result_map: CovResultMap = HashMap::new();
result_map.insert("main.cpp".to_string(), empty_result!());
result_map.insert("mydir\\prova.h".to_string(), empty_result!());
result_map.insert("mydir2\\prova.h".to_string(), empty_result!());
let results = rewrite_paths(
result_map,
None,
None,
None,
false,
vec!["mydir/*".to_string(), "mydir2/*".to_string()],
None,
);
let mut count = 0;
for (abs_path, rel_path, result) in results {
count += 1;
assert_eq!(abs_path, PathBuf::from("main.cpp"));
assert_eq!(rel_path, PathBuf::from("main.cpp"));
assert_eq!(result, empty_result!());
let mut ignore_dirs = vec!["mydir/*".to_string(), "mydir2/*".to_string()];
for _ in 0..2 {
// we run the test twice, one with ignore_dirs and the other with ignore_dirs.reverse()
let mut result_map: CovResultMap = HashMap::new();
result_map.insert("main.cpp".to_string(), empty_result!());
result_map.insert("mydir\\prova.h".to_string(), empty_result!());
result_map.insert("mydir2\\prova.h".to_string(), empty_result!());
let results = rewrite_paths(
result_map,
None,
None,
None,
false,
ignore_dirs.clone(),
None,
);
let mut count = 0;
for (abs_path, rel_path, result) in results {
count += 1;
assert_eq!(abs_path, PathBuf::from("main.cpp"));
assert_eq!(rel_path, PathBuf::from("main.cpp"));
assert_eq!(result, empty_result!());
}
assert_eq!(count, 1);
ignore_dirs.reverse();
}
assert_eq!(count, 1);
}

#[test]
Expand Down

0 comments on commit 131f66f

Please sign in to comment.