33-lazy-ssh-agent #46
@ -27,10 +27,14 @@ pub trait Environment {
|
|||||||
V: AsRef<OsStr>;
|
V: AsRef<OsStr>;
|
||||||
fn get_home_directory(&self) -> Option<PathBuf>;
|
fn get_home_directory(&self) -> Option<PathBuf>;
|
||||||
fn read_line(&mut self) -> Result<String, io::Error>;
|
fn read_line(&mut self) -> Result<String, io::Error>;
|
||||||
|
fn is_ssh_agent_started(&self) -> bool;
|
||||||
|
fn set_ssh_agent_started(&mut self, enabled: bool);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct Prod;
|
pub struct Prod {
|
||||||
|
ssh_agent_started: bool,
|
||||||
|
}
|
||||||
|
|
||||||
impl Environment for Prod {
|
impl Environment for Prod {
|
||||||
fn args_os(&self) -> Vec<OsString> {
|
fn args_os(&self) -> Vec<OsString> {
|
||||||
@ -39,7 +43,7 @@ impl Environment for Prod {
|
|||||||
|
|
||||||
fn var_os<K>(&self, key: K) -> Option<OsString>
|
fn var_os<K>(&self, key: K) -> Option<OsString>
|
||||||
where
|
where
|
||||||
K: AsRef<OsStr>
|
K: AsRef<OsStr>,
|
||||||
{
|
{
|
||||||
env::var_os(key)
|
env::var_os(key)
|
||||||
}
|
}
|
||||||
@ -68,6 +72,14 @@ impl Environment for Prod {
|
|||||||
io::stdin().read_line(&mut buffer)?;
|
io::stdin().read_line(&mut buffer)?;
|
||||||
Ok(buffer.trim().to_string())
|
Ok(buffer.trim().to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_ssh_agent_started(&self) -> bool {
|
||||||
|
self.ssh_agent_started
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_ssh_agent_started(&mut self, enabled: bool) {
|
||||||
|
self.ssh_agent_started = enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShellInterface for Prod {
|
impl ShellInterface for Prod {
|
||||||
|
|||||||
@ -74,6 +74,14 @@ impl Environment for TestEnvironment {
|
|||||||
fn read_line(&mut self) -> Result<String, Error> {
|
fn read_line(&mut self) -> Result<String, Error> {
|
||||||
self.stdin.pop_front().ok_or_else(|| Error::other("Unexpected call to read_line: No input prepared"))
|
self.stdin.pop_front().ok_or_else(|| Error::other("Unexpected call to read_line: No input prepared"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_ssh_agent_started(&self) -> bool {
|
||||||
|
self.ssh_agent_started
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_ssh_agent_started(&mut self, enabled: bool) {
|
||||||
|
self.ssh_agent_started = enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShellInterface for TestEnvironment {
|
impl ShellInterface for TestEnvironment {
|
||||||
|
|||||||
@ -706,6 +706,10 @@ where
|
|||||||
fn start_ssh_agent(&mut self, logger: &Logger) -> Result<(), String> {
|
fn start_ssh_agent(&mut self, logger: &Logger) -> Result<(), String> {
|
||||||
let env = &mut self.environment;
|
let env = &mut self.environment;
|
||||||
|
|
||||||
|
if env.is_ssh_agent_started() {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
//start the ssh agent
|
//start the ssh agent
|
||||||
let agent_output = ShellCommand::SshAgent
|
let agent_output = ShellCommand::SshAgent
|
||||||
.in_env(env)
|
.in_env(env)
|
||||||
@ -732,6 +736,9 @@ where
|
|||||||
.and_expect_success()
|
.and_expect_success()
|
||||||
.into_result_with_error_logging(logger)
|
.into_result_with_error_logging(logger)
|
||||||
.map_err(|e| format!("failed to add ssh-key: {e}"))?;
|
.map_err(|e| format!("failed to add ssh-key: {e}"))?;
|
||||||
|
|
||||||
|
env.set_ssh_agent_started(true);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user