summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2016-09-15 12:40:28 -0400
committerAndrew Gallant <jamslam@gmail.com>2016-09-15 12:40:28 -0400
commitf5c85827cea05d11e1c0c50aa34e07361313f659 (patch)
tree158bfecef11640ded4cad30f63032935bc00cbd6
parent7cefc55238bc23f8b329410520242046dea9ef33 (diff)
Don't traverse directory stack if we don't need to.
-rw-r--r--src/ignore.rs21
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);