1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2025-04-24 17:12:16 +02:00

ignore: fix has_any_ignore_rules for explicit ignores

When building a ignore::WalkBuilder by disabling all standard filters
and adding a custom global ignore file, the ignore file is not used. Example:

    let mut walker = ignore::WalkBuilder::new(dir);
    walker.standard_filters(false);
    walker.add_ignore(myfile);

This makes it impossible to use the ignore crate to walk a directory
with only custom ignore files. Very similar to issue #800 (fixed in
b71a110).

PR #988
This commit is contained in:
phiresky 2018-07-21 19:26:54 +02:00 committed by Andrew Gallant
parent d11a3b3377
commit aa2ce39d14
2 changed files with 20 additions and 0 deletions

View File

@ -266,9 +266,11 @@ impl Ignore {
fn has_any_ignore_rules(&self) -> bool { fn has_any_ignore_rules(&self) -> bool {
let opts = self.0.opts; let opts = self.0.opts;
let has_custom_ignore_files = !self.0.custom_ignore_filenames.is_empty(); let has_custom_ignore_files = !self.0.custom_ignore_filenames.is_empty();
let has_explicit_ignores = !self.0.explicit_ignores.is_empty();
opts.ignore || opts.git_global || opts.git_ignore opts.ignore || opts.git_global || opts.git_ignore
|| opts.git_exclude || has_custom_ignore_files || opts.git_exclude || has_custom_ignore_files
|| has_explicit_ignores
} }
/// Returns a match indicating whether the given file path should be /// Returns a match indicating whether the given file path should be

View File

@ -1673,6 +1673,24 @@ mod tests {
assert_paths(td.path(), &builder, &["bar", "a", "a/bar"]); assert_paths(td.path(), &builder, &["bar", "a", "a/bar"]);
} }
#[test]
fn explicit_ignore_exclusive_use() {
let td = TempDir::new("walk-test-").unwrap();
let igpath = td.path().join(".not-an-ignore");
mkdirp(td.path().join("a"));
wfile(&igpath, "foo");
wfile(td.path().join("foo"), "");
wfile(td.path().join("a/foo"), "");
wfile(td.path().join("bar"), "");
wfile(td.path().join("a/bar"), "");
let mut builder = WalkBuilder::new(td.path());
builder.standard_filters(false);
assert!(builder.add_ignore(&igpath).is_none());
assert_paths(td.path(), &builder,
&[".not-an-ignore", "bar", "a", "a/bar"]);
}
#[test] #[test]
fn gitignore_parent() { fn gitignore_parent() {
let td = TempDir::new("walk-test-").unwrap(); let td = TempDir::new("walk-test-").unwrap();