summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Triplett <josh@joshtriplett.org>2021-11-12 14:37:05 +0100
committerGitHub <noreply@github.com>2021-11-12 08:37:05 -0500
commit009dda1488ac6a01725b3e49ec9b81a1edf8036d (patch)
treecaa3c0147335a68552fdb6d4ba663a65e384429a
parentba535fb5a34f6d703fc652e8dfc23c0fed78fc74 (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
-rw-r--r--crates/ignore/src/dir.rs15
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