Browse Source

fix gitignore performance issues

Evan Almloff 2 years ago
parent
commit
34c8ad8849
2 changed files with 11 additions and 10 deletions
  1. 1 1
      packages/hot-reload/Cargo.toml
  2. 10 9
      packages/hot-reload/src/lib.rs

+ 1 - 1
packages/hot-reload/Cargo.toml

@@ -23,4 +23,4 @@ serde_json = "1.0.91"
 serde = { version = "1", features = ["derive"] }
 execute = "0.2.11"
 once_cell = "1.17.0"
-gitignore = "1.0.7"
+ignore = "0.4.19"

+ 10 - 9
packages/hot-reload/src/lib.rs

@@ -166,7 +166,7 @@ pub fn init<Ctx: HotReloadingContext + Send + 'static>(cfg: Config<Ctx>) {
             std::thread::spawn(move || {
                 // try to find the gitingore file
                 let gitignore_file_path = crate_dir.join(".gitignore");
-                let gitignore_file = gitignore::File::new(&gitignore_file_path.as_path());
+                let (gitignore, _) = ignore::gitignore::Gitignore::new(gitignore_file_path);
 
                 let mut last_update_time = chrono::Local::now().timestamp();
 
@@ -220,15 +220,16 @@ pub fn init<Ctx: HotReloadingContext + Send + 'static>(cfg: Config<Ctx>) {
                                 .iter()
                                 .filter(|path| {
                                     // skip non rust files
-                                    matches!(path.extension().and_then(|p| p.to_str()), Some("rs" | "toml" | "css" | "html" | "js")) &&
+                                    matches!(
+                                        path.extension().and_then(|p| p.to_str()),
+                                        Some("rs" | "toml" | "css" | "html" | "js")
+                                    )&&
                                     // skip excluded paths
-                                    !excluded_paths.iter().any(|p| path.starts_with(p)) && match &gitignore_file{
-                                        Ok(file) => match file.is_excluded(path){
-                                            Ok(excluded) => !excluded,
-                                            Err(_) => true,
-                                        },
-                                        Err(_) => true,
-                                    }
+                                    !excluded_paths.iter().any(|p| path.starts_with(p)) &&
+                                    // respect .gitignore
+                                    !gitignore
+                                        .matched_path_or_any_parents(path, false)
+                                        .is_ignore()
                                 })
                                 .collect::<Vec<_>>();