diff --git a/ignore/src/dir.rs b/ignore/src/dir.rs index 923d574..77ee6ad 100644 --- a/ignore/src/dir.rs +++ b/ignore/src/dir.rs @@ -73,13 +73,6 @@ struct IgnoreOptions { git_exclude: bool, } -impl IgnoreOptions { - /// Returns true if at least one type of ignore rules should be matched. - fn has_any_ignore_options(&self) -> bool { - self.ignore || self.git_global || self.git_ignore || self.git_exclude - } -} - /// Ignore is a matcher useful for recursively walking one or more directories. #[derive(Clone, Debug)] pub struct Ignore(Arc); @@ -267,6 +260,15 @@ impl Ignore { (ig, errs.into_error_option()) } + /// Returns true if at least one type of ignore rule should be matched. + fn has_any_ignore_rules(&self) -> bool { + let opts = self.0.opts; + let has_custom_ignore_files = !self.0.custom_ignore_filenames.is_empty(); + + opts.ignore || opts.git_global || opts.git_ignore + || opts.git_exclude || has_custom_ignore_files + } + /// Returns a match indicating whether the given file path should be /// ignored or not. /// @@ -295,7 +297,7 @@ impl Ignore { } } let mut whitelisted = Match::None; - if self.0.opts.has_any_ignore_options() { + if self.has_any_ignore_rules() { let mat = self.matched_ignore(path, is_dir); if mat.is_ignore() { return mat; diff --git a/ignore/src/walk.rs b/ignore/src/walk.rs index 0ecd28b..e43aa45 100644 --- a/ignore/src/walk.rs +++ b/ignore/src/walk.rs @@ -1585,6 +1585,26 @@ mod tests { assert_paths(td.path(), &builder, &["bar", "a", "a/bar"]); } + #[test] + fn custom_ignore_exclusive_use() { + let td = TempDir::new("walk-test-").unwrap(); + let custom_ignore = ".customignore"; + mkdirp(td.path().join("a")); + wfile(td.path().join(custom_ignore), "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.ignore(false); + builder.git_ignore(false); + builder.git_global(false); + builder.git_exclude(false); + builder.add_custom_ignore_filename(&custom_ignore); + assert_paths(td.path(), &builder, &["bar", "a", "a/bar"]); + } + #[test] fn gitignore() { let td = TempDir::new("walk-test-").unwrap();