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:
parent
9300dbc834
commit
19162c3160
4 changed files with 53 additions and 10 deletions
|
@ -22,6 +22,7 @@ test-support = ["fs/test-support"]
|
|||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
client.workspace = true
|
||||
env_logger.workspace = true
|
||||
fs.workspace = true
|
||||
futures.workspace = true
|
||||
|
|
|
@ -189,11 +189,34 @@ impl HeadlessProject {
|
|||
message: TypedEnvelope<proto::AddWorktree>,
|
||||
mut cx: AsyncAppContext,
|
||||
) -> Result<proto::AddWorktreeResponse> {
|
||||
use client::ErrorCodeExt;
|
||||
let path = shellexpand::tilde(&message.payload.path).to_string();
|
||||
|
||||
let fs = this.read_with(&mut cx, |this, _| this.fs.clone())?;
|
||||
let path = PathBuf::from(path);
|
||||
|
||||
let canonicalized = match fs.canonicalize(&path).await {
|
||||
Ok(path) => path,
|
||||
Err(e) => {
|
||||
let mut parent = path
|
||||
.parent()
|
||||
.ok_or(e)
|
||||
.map_err(|_| anyhow!("{:?} does not exist", path))?;
|
||||
if parent == Path::new("") {
|
||||
parent = util::paths::home_dir();
|
||||
}
|
||||
let parent = fs.canonicalize(parent).await.map_err(|_| {
|
||||
anyhow!(proto::ErrorCode::DevServerProjectPathDoesNotExist
|
||||
.with_tag("path", &path.to_string_lossy().as_ref()))
|
||||
})?;
|
||||
parent.join(path.file_name().unwrap())
|
||||
}
|
||||
};
|
||||
|
||||
let worktree = this
|
||||
.update(&mut cx.clone(), |this, _| {
|
||||
Worktree::local(
|
||||
Path::new(&path),
|
||||
Arc::from(canonicalized),
|
||||
true,
|
||||
this.fs.clone(),
|
||||
this.next_entry_id.clone(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue