diff --git a/rust/chg/src/locator.rs b/rust/chg/src/locator.rs --- a/rust/chg/src/locator.rs +++ b/rust/chg/src/locator.rs @@ -20,6 +20,7 @@ use tokio_process::{Child, CommandExt}; use tokio_timer; +use super::clientext::ChgClientExt; use super::message::ServerSpec; use super::procutil; @@ -80,6 +81,11 @@ check_server_capabilities(client.server_spec())?; Ok((loc, client)) }) + .and_then(|(loc, client)| { + client + .set_current_dir(&loc.current_dir) + .map(|client| (loc, client)) + }) } /// Spawns new server process and connects to it. diff --git a/rust/chg/src/main.rs b/rust/chg/src/main.rs --- a/rust/chg/src/main.rs +++ b/rust/chg/src/main.rs @@ -73,14 +73,12 @@ } fn run() -> io::Result { - let current_dir = env::current_dir()?; let loc = Locator::prepare_from_env()?; let handler = ChgUiHandler::new(); let (result_tx, result_rx) = oneshot::channel(); let fut = loc .connect() - .and_then(|(_, client)| client.set_current_dir(current_dir)) - .and_then(|client| client.attach_io(io::stdin(), io::stdout(), io::stderr())) + .and_then(|(_, client)| client.attach_io(io::stdin(), io::stdout(), io::stderr())) .and_then(|client| { let pid = client.server_spec().process_id.unwrap(); let pgid = client.server_spec().process_group_id;