Don't try to make project search and outline order match project panel (#20513)
A straight alphabetical order is arguably clearer, and avoids a large initial delay when searching large repos. Release Notes: - Fixed a long initial delay when performing a project search in a large repository.
This commit is contained in:
parent
97b542b22a
commit
149e5fde36
3 changed files with 3 additions and 63 deletions
|
@ -2280,7 +2280,6 @@ impl OutlinePanel {
|
||||||
// For a proper git status propagation, we have to keep the entries sorted lexicographically.
|
// For a proper git status propagation, we have to keep the entries sorted lexicographically.
|
||||||
entries.sort_by(|a, b| a.path.as_ref().cmp(b.path.as_ref()));
|
entries.sort_by(|a, b| a.path.as_ref().cmp(b.path.as_ref()));
|
||||||
worktree_snapshot.propagate_git_statuses(&mut entries);
|
worktree_snapshot.propagate_git_statuses(&mut entries);
|
||||||
project::sort_worktree_entries(&mut entries);
|
|
||||||
(worktree_id, entries)
|
(worktree_id, entries)
|
||||||
})
|
})
|
||||||
.flat_map(|(worktree_id, entries)| {
|
.flat_map(|(worktree_id, entries)| {
|
||||||
|
|
|
@ -4654,61 +4654,6 @@ async fn test_search_in_gitignored_dirs(cx: &mut gpui::TestAppContext) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[gpui::test]
|
|
||||||
async fn test_search_ordering(cx: &mut gpui::TestAppContext) {
|
|
||||||
init_test(cx);
|
|
||||||
|
|
||||||
let fs = FakeFs::new(cx.background_executor.clone());
|
|
||||||
fs.insert_tree(
|
|
||||||
"/dir",
|
|
||||||
json!({
|
|
||||||
".git": {},
|
|
||||||
".gitignore": "**/target\n/node_modules\n",
|
|
||||||
"aaa.txt": "key:value",
|
|
||||||
"bbb": {
|
|
||||||
"index.txt": "index_key:index_value"
|
|
||||||
},
|
|
||||||
"node_modules": {
|
|
||||||
"10 eleven": "key",
|
|
||||||
"1 two": "key"
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
let project = Project::test(fs.clone(), ["/dir".as_ref()], cx).await;
|
|
||||||
|
|
||||||
let mut search = project.update(cx, |project, cx| {
|
|
||||||
project.search(
|
|
||||||
SearchQuery::text(
|
|
||||||
"key",
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
Default::default(),
|
|
||||||
Default::default(),
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.unwrap(),
|
|
||||||
cx,
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
fn file_name(search_result: Option<SearchResult>, cx: &mut gpui::TestAppContext) -> String {
|
|
||||||
match search_result.unwrap() {
|
|
||||||
SearchResult::Buffer { buffer, .. } => buffer.read_with(cx, |buffer, _| {
|
|
||||||
buffer.file().unwrap().path().to_string_lossy().to_string()
|
|
||||||
}),
|
|
||||||
_ => panic!("Expected buffer"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_eq!(file_name(search.next().await, cx), "bbb/index.txt");
|
|
||||||
assert_eq!(file_name(search.next().await, cx), "node_modules/1 two");
|
|
||||||
assert_eq!(file_name(search.next().await, cx), "node_modules/10 eleven");
|
|
||||||
assert_eq!(file_name(search.next().await, cx), "aaa.txt");
|
|
||||||
assert!(search.next().await.is_none())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[gpui::test]
|
#[gpui::test]
|
||||||
async fn test_create_entry(cx: &mut gpui::TestAppContext) {
|
async fn test_create_entry(cx: &mut gpui::TestAppContext) {
|
||||||
init_test(cx);
|
init_test(cx);
|
||||||
|
|
|
@ -23,7 +23,7 @@ use smol::{
|
||||||
stream::StreamExt,
|
stream::StreamExt,
|
||||||
};
|
};
|
||||||
use text::ReplicaId;
|
use text::ReplicaId;
|
||||||
use util::{paths::compare_paths, ResultExt};
|
use util::ResultExt;
|
||||||
use worktree::{Entry, ProjectEntryId, Worktree, WorktreeId, WorktreeSettings};
|
use worktree::{Entry, ProjectEntryId, Worktree, WorktreeId, WorktreeSettings};
|
||||||
|
|
||||||
use crate::{search::SearchQuery, ProjectPath};
|
use crate::{search::SearchQuery, ProjectPath};
|
||||||
|
@ -725,9 +725,7 @@ impl WorktreeStore {
|
||||||
!metadata.is_dir,
|
!metadata.is_dir,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
results.sort_by(|(a_path, a_is_file), (b_path, b_is_file)| {
|
results.sort_by(|(a_path, _), (b_path, _)| a_path.cmp(b_path));
|
||||||
compare_paths((a_path, *a_is_file), (b_path, *b_is_file))
|
|
||||||
});
|
|
||||||
for (path, is_file) in results {
|
for (path, is_file) in results {
|
||||||
if is_file {
|
if is_file {
|
||||||
if query.filters_path() {
|
if query.filters_path() {
|
||||||
|
@ -782,9 +780,7 @@ impl WorktreeStore {
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let include_root = snapshots.len() > 1;
|
let include_root = snapshots.len() > 1;
|
||||||
for (snapshot, settings) in snapshots {
|
for (snapshot, settings) in snapshots {
|
||||||
let mut entries: Vec<_> = snapshot.entries(query.include_ignored(), 0).collect();
|
for entry in snapshot.entries(query.include_ignored(), 0) {
|
||||||
entries.sort_by(|a, b| compare_paths((&a.path, a.is_file()), (&b.path, b.is_file())));
|
|
||||||
for entry in entries {
|
|
||||||
if entry.is_dir() && entry.is_ignored {
|
if entry.is_dir() && entry.is_ignored {
|
||||||
if !settings.is_path_excluded(&entry.path) {
|
if !settings.is_path_excluded(&entry.path) {
|
||||||
Self::scan_ignored_dir(
|
Self::scan_ignored_dir(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue