Closes #33736 Use `thiserror` to implement error stack and `anyhow` to report is to user. Also move some code from main to remote_server to have better crate isolation. Release Notes: - N/A --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev>
84 lines
2.1 KiB
Rust
84 lines
2.1 KiB
Rust
mod headless_project;
|
|
|
|
#[cfg(not(windows))]
|
|
pub mod unix;
|
|
|
|
#[cfg(test)]
|
|
mod remote_editing_tests;
|
|
|
|
use clap::Subcommand;
|
|
use std::path::PathBuf;
|
|
|
|
pub use headless_project::{HeadlessAppState, HeadlessProject};
|
|
|
|
#[derive(Subcommand)]
|
|
pub enum Commands {
|
|
Run {
|
|
#[arg(long)]
|
|
log_file: PathBuf,
|
|
#[arg(long)]
|
|
pid_file: PathBuf,
|
|
#[arg(long)]
|
|
stdin_socket: PathBuf,
|
|
#[arg(long)]
|
|
stdout_socket: PathBuf,
|
|
#[arg(long)]
|
|
stderr_socket: PathBuf,
|
|
},
|
|
Proxy {
|
|
#[arg(long)]
|
|
reconnect: bool,
|
|
#[arg(long)]
|
|
identifier: String,
|
|
},
|
|
Version,
|
|
}
|
|
|
|
#[cfg(not(windows))]
|
|
pub fn run(command: Commands) -> anyhow::Result<()> {
|
|
use anyhow::Context;
|
|
use release_channel::{RELEASE_CHANNEL, ReleaseChannel};
|
|
use unix::{ExecuteProxyError, execute_proxy, execute_run};
|
|
|
|
match command {
|
|
Commands::Run {
|
|
log_file,
|
|
pid_file,
|
|
stdin_socket,
|
|
stdout_socket,
|
|
stderr_socket,
|
|
} => execute_run(
|
|
log_file,
|
|
pid_file,
|
|
stdin_socket,
|
|
stdout_socket,
|
|
stderr_socket,
|
|
),
|
|
Commands::Proxy {
|
|
identifier,
|
|
reconnect,
|
|
} => execute_proxy(identifier, reconnect)
|
|
.inspect_err(|err| {
|
|
if let ExecuteProxyError::ServerNotRunning(err) = err {
|
|
std::process::exit(err.to_exit_code());
|
|
}
|
|
})
|
|
.context("running proxy on the remote server"),
|
|
Commands::Version => {
|
|
let release_channel = *RELEASE_CHANNEL;
|
|
match release_channel {
|
|
ReleaseChannel::Stable | ReleaseChannel::Preview => {
|
|
println!("{}", env!("ZED_PKG_VERSION"))
|
|
}
|
|
ReleaseChannel::Nightly | ReleaseChannel::Dev => {
|
|
println!(
|
|
"{}",
|
|
option_env!("ZED_COMMIT_SHA").unwrap_or(release_channel.dev_name())
|
|
)
|
|
}
|
|
};
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|