Improve terminal.working_directory for non-project files (#18251)

This commit is contained in:
Peter Tripp 2024-11-13 15:40:36 +00:00 committed by GitHub
parent 27dfb48a7b
commit eb4e7472e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 8 deletions

View file

@ -46,12 +46,16 @@ impl Project {
let worktree = self
.active_entry()
.and_then(|entry_id| self.worktree_for_entry(entry_id, cx))
.or_else(|| self.worktrees(cx).next())?;
let worktree = worktree.read(cx);
if !worktree.root_entry()?.is_dir() {
return None;
}
Some(worktree.abs_path().to_path_buf())
.into_iter()
.chain(self.worktrees(cx))
.find_map(|tree| {
let worktree = tree.read(cx);
worktree
.root_entry()
.filter(|entry| entry.is_dir())
.map(|_| worktree.abs_path().to_path_buf())
});
worktree
}
pub fn first_project_directory(&self, cx: &AppContext) -> Option<PathBuf> {

View file

@ -1471,7 +1471,7 @@ mod tests {
});
}
// Active entry with a work tree, worktree is a file -> home_dir()
// Active entry with a work tree, worktree is a file -> worktree_folder()
#[gpui::test]
async fn active_entry_worktree_is_file(cx: &mut TestAppContext) {
let (project, workspace) = init_test(cx).await;
@ -1487,7 +1487,7 @@ mod tests {
assert!(active_entry.is_some());
let res = default_working_directory(workspace, cx);
assert_eq!(res, None);
assert_eq!(res, Some((Path::new("/root1/")).to_path_buf()));
let res = first_project_directory(workspace, cx);
assert_eq!(res, Some((Path::new("/root1/")).to_path_buf()));
});