Detailed changes
@@ -493,14 +493,13 @@ impl MessageEditor {
let Some(entry) = self.project.read(cx).entry_for_path(&project_path, cx) else {
return Task::ready(Err(anyhow!("project entry not found")));
};
- let Some(worktree) = self.project.read(cx).worktree_for_entry(entry.id, cx) else {
+ let directory_path = entry.path.clone();
+ let worktree_id = project_path.worktree_id;
+ let Some(worktree) = self.project.read(cx).worktree_for_id(worktree_id, cx) else {
return Task::ready(Err(anyhow!("worktree not found")));
};
let project = self.project.clone();
cx.spawn(async move |_, cx| {
- let directory_path = entry.path.clone();
-
- let worktree_id = worktree.read_with(cx, |worktree, _| worktree.id())?;
let file_paths = worktree.read_with(cx, |worktree, _cx| {
collect_files_in_path(worktree, &directory_path)
})?;
@@ -4070,15 +4070,15 @@ impl AcpThreadView {
MentionUri::PastedImage => {}
MentionUri::Directory { abs_path } => {
let project = workspace.project();
- let Some(entry) = project.update(cx, |project, cx| {
+ let Some(entry_id) = project.update(cx, |project, cx| {
let path = project.find_project_path(abs_path, cx)?;
- project.entry_for_path(&path, cx)
+ project.entry_for_path(&path, cx).map(|entry| entry.id)
}) else {
return;
};
project.update(cx, |_, cx| {
- cx.emit(project::Event::RevealInProjectPanel(entry.id));
+ cx.emit(project::Event::RevealInProjectPanel(entry_id));
});
}
MentionUri::Symbol {
@@ -4091,11 +4091,9 @@ impl AcpThreadView {
line_range,
} => {
let project = workspace.project();
- let Some((path, _)) = project.update(cx, |project, cx| {
- let path = project.find_project_path(path, cx)?;
- let entry = project.entry_for_path(&path, cx)?;
- Some((path, entry))
- }) else {
+ let Some(path) =
+ project.update(cx, |project, cx| project.find_project_path(path, cx))
+ else {
return;
};
@@ -987,7 +987,8 @@ impl MentionLink {
.read(cx)
.project()
.read(cx)
- .entry_for_path(&project_path, cx)?;
+ .entry_for_path(&project_path, cx)?
+ .clone();
Some(MentionLink::File(project_path, entry))
}
Self::SYMBOL => {
@@ -4352,7 +4352,7 @@ impl Project {
self.active_entry
}
- pub fn entry_for_path(&self, path: &ProjectPath, cx: &App) -> Option<Entry> {
+ pub fn entry_for_path<'a>(&'a self, path: &ProjectPath, cx: &'a App) -> Option<&'a Entry> {
self.worktree_store.read(cx).entry_for_path(path, cx)
}
@@ -203,11 +203,10 @@ impl WorktreeStore {
})
}
- pub fn entry_for_path(&self, path: &ProjectPath, cx: &App) -> Option<Entry> {
+ pub fn entry_for_path<'a>(&'a self, path: &ProjectPath, cx: &'a App) -> Option<&'a Entry> {
self.worktree_for_id(path.worktree_id, cx)?
.read(cx)
.entry_for_path(&path.path)
- .cloned()
}
pub fn create_worktree(
@@ -594,9 +594,10 @@ impl project::ProjectItem for NotebookItem {
};
let id = project
- .update(cx, |project, cx| project.entry_for_path(&path, cx))?
- .context("Entry not found")?
- .id;
+ .update(cx, |project, cx| {
+ project.entry_for_path(&path, cx).map(|entry| entry.id)
+ })?
+ .context("Entry not found")?;
cx.new(|_| NotebookItem {
path: abs_path,
@@ -3201,6 +3201,7 @@ pub mod tests {
.read(cx)
.entry_for_path(&(worktree_id, "a").into(), cx)
.expect("no entry for /a/ directory")
+ .clone()
});
assert!(a_dir_entry.is_dir());
window