Wait for ignored directory to be expanded in descendant entries test
This commit is contained in:
parent
aa6f2f1816
commit
205c758e4e
3 changed files with 21 additions and 13 deletions
|
@ -5413,10 +5413,7 @@ impl Project {
|
||||||
if self.is_local() {
|
if self.is_local() {
|
||||||
let worktree = self.worktree_for_id(worktree_id, cx)?;
|
let worktree = self.worktree_for_id(worktree_id, cx)?;
|
||||||
worktree.update(cx, |worktree, cx| {
|
worktree.update(cx, |worktree, cx| {
|
||||||
worktree
|
worktree.as_local_mut().unwrap().expand_dir(entry_id, cx);
|
||||||
.as_local_mut()
|
|
||||||
.unwrap()
|
|
||||||
.mark_entry_expanded(entry_id, cx);
|
|
||||||
});
|
});
|
||||||
} else if let Some(project_id) = self.remote_id() {
|
} else if let Some(project_id) = self.remote_id() {
|
||||||
cx.background()
|
cx.background()
|
||||||
|
@ -5742,10 +5739,7 @@ impl Project {
|
||||||
.read_with(&cx, |this, cx| this.worktree_for_entry(entry_id, cx))
|
.read_with(&cx, |this, cx| this.worktree_for_entry(entry_id, cx))
|
||||||
.ok_or_else(|| anyhow!("invalid request"))?;
|
.ok_or_else(|| anyhow!("invalid request"))?;
|
||||||
worktree.update(&mut cx, |worktree, cx| {
|
worktree.update(&mut cx, |worktree, cx| {
|
||||||
worktree
|
worktree.as_local_mut().unwrap().expand_dir(entry_id, cx)
|
||||||
.as_local_mut()
|
|
||||||
.unwrap()
|
|
||||||
.mark_entry_expanded(entry_id, cx)
|
|
||||||
});
|
});
|
||||||
Ok(proto::Ack {})
|
Ok(proto::Ack {})
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,7 @@ enum ScanRequest {
|
||||||
},
|
},
|
||||||
ExpandDir {
|
ExpandDir {
|
||||||
entry_id: ProjectEntryId,
|
entry_id: ProjectEntryId,
|
||||||
|
done: barrier::Sender,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1149,14 +1150,16 @@ impl LocalWorktree {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mark_entry_expanded(
|
pub fn expand_dir(
|
||||||
&mut self,
|
&mut self,
|
||||||
entry_id: ProjectEntryId,
|
entry_id: ProjectEntryId,
|
||||||
_cx: &mut ModelContext<Worktree>,
|
_cx: &mut ModelContext<Worktree>,
|
||||||
) {
|
) -> barrier::Receiver {
|
||||||
|
let (tx, rx) = barrier::channel();
|
||||||
self.scan_requests_tx
|
self.scan_requests_tx
|
||||||
.try_send(ScanRequest::ExpandDir { entry_id })
|
.try_send(ScanRequest::ExpandDir { entry_id, done: tx })
|
||||||
.ok();
|
.ok();
|
||||||
|
rx
|
||||||
}
|
}
|
||||||
|
|
||||||
fn refresh_entry(
|
fn refresh_entry(
|
||||||
|
@ -2963,7 +2966,7 @@ impl BackgroundScanner {
|
||||||
self.reload_entries_for_paths(paths, None).await;
|
self.reload_entries_for_paths(paths, None).await;
|
||||||
self.send_status_update(false, Some(done))
|
self.send_status_update(false, Some(done))
|
||||||
}
|
}
|
||||||
ScanRequest::ExpandDir { entry_id } => {
|
ScanRequest::ExpandDir { entry_id, done } => {
|
||||||
let path = {
|
let path = {
|
||||||
let mut state = self.state.lock();
|
let mut state = self.state.lock();
|
||||||
state.expanded_dirs.insert(entry_id);
|
state.expanded_dirs.insert(entry_id);
|
||||||
|
@ -2978,7 +2981,7 @@ impl BackgroundScanner {
|
||||||
.await;
|
.await;
|
||||||
if let Some(job) = scan_job_rx.next().await {
|
if let Some(job) = scan_job_rx.next().await {
|
||||||
self.scan_dir(&job).await.log_err();
|
self.scan_dir(&job).await.log_err();
|
||||||
self.send_status_update(false, None);
|
self.send_status_update(false, Some(done));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
|
|
|
@ -8,6 +8,7 @@ use fs::{repository::GitFileStatus, FakeFs, Fs, RealFs, RemoveOptions};
|
||||||
use git::GITIGNORE;
|
use git::GITIGNORE;
|
||||||
use gpui::{executor::Deterministic, ModelContext, Task, TestAppContext};
|
use gpui::{executor::Deterministic, ModelContext, Task, TestAppContext};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
|
use postage::stream::Stream;
|
||||||
use pretty_assertions::assert_eq;
|
use pretty_assertions::assert_eq;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
@ -154,7 +155,17 @@ async fn test_descendent_entries(cx: &mut TestAppContext) {
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
vec![Path::new("g"), Path::new("g/h"),]
|
vec![Path::new("g"), Path::new("g/h"),]
|
||||||
);
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Expand gitignored directory.
|
||||||
|
tree.update(cx, |tree, cx| {
|
||||||
|
let tree = tree.as_local_mut().unwrap();
|
||||||
|
tree.expand_dir(tree.entry_for_path("i/j").unwrap().id, cx)
|
||||||
|
})
|
||||||
|
.recv()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
tree.read_with(cx, |tree, _| {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tree.descendent_entries(false, false, Path::new("i"))
|
tree.descendent_entries(false, false, Path::new("i"))
|
||||||
.map(|entry| entry.path.as_ref())
|
.map(|entry| entry.path.as_ref())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue