ssh remoting: Show error message if project path does not exist (#18343)

This now shows an error message if you try open a project over SSH that
doesn't exist. If it's a possible file-path though, it acts like Zed's
`cli` and opens the file so that it can be created.

- Works: `cargo run ssh://127.0.0.1/~/folder-exists/file-does-not-exist`
— this will open `file-does-not-exist`
- Shows error: `cargo run
ssh://127.0.0.1/~/folder-does-not-exist/file-does-not-exist` — this will
show an error

Release Notes:

- N/A

Co-authored-by: Bennet <bennet@zed.dev>
Co-authored-by: Conrad <conrad@zed.dev>
This commit is contained in:
Thorsten Ball 2024-09-25 18:08:34 +02:00 committed by GitHub
parent 9300dbc834
commit 19162c3160
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 53 additions and 10 deletions

View file

@ -5544,12 +5544,21 @@ pub fn open_ssh_project(
)
})?;
let mut project_paths_to_open = vec![];
let mut project_path_errors = vec![];
for path in paths {
project
.update(&mut cx, |project, cx| {
project.find_or_create_worktree(&path, true, cx)
})?
.await?;
let result = cx
.update(|cx| Workspace::project_path_for_path(project.clone(), &path, true, cx))?
.await;
match result {
Ok((_, project_path)) => {
project_paths_to_open.push((path.clone(), Some(project_path)));
}
Err(error) => {
project_path_errors.push(error);
}
};
}
let serialized_workspace =
@ -5576,11 +5585,21 @@ pub fn open_ssh_project(
.update(&mut cx, |_, cx| {
cx.activate_window();
open_items(serialized_workspace, vec![], app_state, cx)
open_items(serialized_workspace, project_paths_to_open, app_state, cx)
})?
.await?;
Ok(())
window.update(&mut cx, |workspace, cx| {
for error in project_path_errors {
if error.error_code() == proto::ErrorCode::DevServerProjectPathDoesNotExist {
if let Some(path) = error.error_tag("path") {
workspace.show_error(&anyhow!("'{path}' does not exist"), cx)
}
} else {
workspace.show_error(&error, cx)
}
}
})
})
}