Ensure ssh agent is only started once
This commit is contained in:
parent
82fe053ba8
commit
df26eb435f
@ -27,10 +27,14 @@ pub trait Environment {
|
||||
V: AsRef<OsStr>;
|
||||
fn get_home_directory(&self) -> Option<PathBuf>;
|
||||
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)]
|
||||
pub struct Prod;
|
||||
pub struct Prod {
|
||||
ssh_agent_started: bool,
|
||||
}
|
||||
|
||||
impl Environment for Prod {
|
||||
fn args_os(&self) -> Vec<OsString> {
|
||||
@ -38,8 +42,8 @@ impl Environment for Prod {
|
||||
}
|
||||
|
||||
fn var_os<K>(&self, key: K) -> Option<OsString>
|
||||
where
|
||||
K: AsRef<OsStr>
|
||||
where
|
||||
K: AsRef<OsStr>,
|
||||
{
|
||||
env::var_os(key)
|
||||
}
|
||||
@ -68,6 +72,14 @@ impl Environment for Prod {
|
||||
io::stdin().read_line(&mut buffer)?;
|
||||
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 {
|
||||
|
||||
@ -74,6 +74,14 @@ impl Environment for TestEnvironment {
|
||||
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"))
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
@ -706,6 +706,10 @@ where
|
||||
fn start_ssh_agent(&mut self, logger: &Logger) -> Result<(), String> {
|
||||
let env = &mut self.environment;
|
||||
|
||||
if env.is_ssh_agent_started() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
//start the ssh agent
|
||||
let agent_output = ShellCommand::SshAgent
|
||||
.in_env(env)
|
||||
@ -732,6 +736,9 @@ where
|
||||
.and_expect_success()
|
||||
.into_result_with_error_logging(logger)
|
||||
.map_err(|e| format!("failed to add ssh-key: {e}"))?;
|
||||
|
||||
env.set_ssh_agent_started(true);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user