diff options
author | Josh Triplett <josh@joshtriplett.org> | 2021-11-12 14:37:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-12 08:37:05 -0500 |
commit | 009dda1488ac6a01725b3e49ec9b81a1edf8036d (patch) | |
tree | caa3c0147335a68552fdb6d4ba663a65e384429a /crates/ignore | |
parent | ba535fb5a34f6d703fc652e8dfc23c0fed78fc74 (diff) |
ignore: if require_git is false, don't stat .git
I've confirmed via strace that this eliminates a pile of stat calls.
PR #2052
Diffstat (limited to 'crates/ignore')
-rw-r--r-- | crates/ignore/src/dir.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/crates/ignore/src/dir.rs b/crates/ignore/src/dir.rs index 09414e9a..2577665d 100644 --- a/crates/ignore/src/dir.rs +++ b/crates/ignore/src/dir.rs @@ -202,11 +202,12 @@ impl Ignore { errs.maybe_push(err); igtmp.is_absolute_parent = true; igtmp.absolute_base = Some(absolute_base.clone()); - igtmp.has_git = if self.0.opts.git_ignore { - parent.join(".git").exists() - } else { - false - }; + igtmp.has_git = + if self.0.opts.require_git && self.0.opts.git_ignore { + parent.join(".git").exists() + } else { + false + }; ig = Ignore(Arc::new(igtmp)); compiled.insert(parent.as_os_str().to_os_string(), ig.clone()); } @@ -231,7 +232,9 @@ impl Ignore { /// Like add_child, but takes a full path and returns an IgnoreInner. fn add_child_path(&self, dir: &Path) -> (IgnoreInner, Option<Error>) { - let git_type = if self.0.opts.git_ignore || self.0.opts.git_exclude { + let git_type = if self.0.opts.require_git + && (self.0.opts.git_ignore || self.0.opts.git_exclude) + { dir.join(".git").metadata().ok().map(|md| md.file_type()) } else { None |