diff --git a/crates/worktree/src/worktree.rs b/crates/worktree/src/worktree.rs index 056e00585d..1672d9f8da 100644 --- a/crates/worktree/src/worktree.rs +++ b/crates/worktree/src/worktree.rs @@ -3826,7 +3826,8 @@ impl BackgroundScanner { .await; // Ensure that .git and .gitignore are processed first. - child_paths.sort_unstable(); + swap_to_front(&mut child_paths, *GITIGNORE); + swap_to_front(&mut child_paths, *DOT_GIT); for child_abs_path in child_paths { let child_abs_path: Arc = child_abs_path.into(); @@ -4620,6 +4621,16 @@ impl BackgroundScanner { } } +fn swap_to_front(child_paths: &mut Vec, file: &OsStr) { + let position = child_paths + .iter() + .position(|path| path.file_name().unwrap() == file); + if let Some(position) = position { + let temp = child_paths.remove(position); + child_paths.insert(0, temp); + } +} + fn char_bag_for_path(root_char_bag: CharBag, path: &Path) -> CharBag { let mut result = root_char_bag; result.extend(