diff options
author | Andrew Gallant <jamslam@gmail.com> | 2016-09-15 12:40:28 -0400 |
---|---|---|
committer | Andrew Gallant <jamslam@gmail.com> | 2016-09-15 12:40:28 -0400 |
commit | f5c85827cea05d11e1c0c50aa34e07361313f659 (patch) | |
tree | 158bfecef11640ded4cad30f63032935bc00cbd6 | |
parent | 7cefc55238bc23f8b329410520242046dea9ef33 (diff) |
Don't traverse directory stack if we don't need to.
-rw-r--r-- | src/ignore.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/ignore.rs b/src/ignore.rs index 26124f1c..09c0b302 100644 --- a/src/ignore.rs +++ b/src/ignore.rs @@ -82,7 +82,10 @@ pub struct Ignore { overrides: Overrides, /// A file type matcher. types: Types, + /// Whether to ignore hidden files or not. ignore_hidden: bool, + /// When true, don't look at .gitignore or .agignore files for ignore + /// rules. no_ignore: bool, } @@ -207,15 +210,17 @@ impl Ignore { debug!("{} ignored because it is hidden", path.display()); return true; } - for id in self.stack.iter().rev().filter_map(|id| id.as_ref()) { - let mat = id.matched(path, is_dir); - if let Some(is_ignored) = self.ignore_match(path, mat) { - if is_ignored { - return true; + if !self.no_ignore { + for id in self.stack.iter().rev().filter_map(|id| id.as_ref()) { + let mat = id.matched(path, is_dir); + if let Some(is_ignored) = self.ignore_match(path, mat) { + if is_ignored { + return true; + } + // If this path is whitelisted by an ignore, then + // fallthrough and let the file type matcher have a say. + break; } - // If this path is whitelisted by an ignore, then fallthrough - // and let the file type matcher have a say. - break; } } let mat = self.types.matched(path, is_dir); |