diff options
Diffstat (limited to 'pygerrit/ssh.py')
| -rw-r--r-- | pygerrit/ssh.py | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/pygerrit/ssh.py b/pygerrit/ssh.py index c235999..e779715 100644 --- a/pygerrit/ssh.py +++ b/pygerrit/ssh.py @@ -65,17 +65,19 @@ class GerritSSHClient(SSHClient): """ Gerrit SSH Client, wrapping the paramiko SSH Client. """ - def __init__(self, hostname): + def __init__(self, hostname, username=None, port=None): """ Initialise and connect to SSH. """ super(GerritSSHClient, self).__init__() self.remote_version = None self.hostname = hostname + self.username = username + self.key_filename = None + self.port = port self.connected = Event() self.lock = Lock() - def _do_connect(self): - """ Connect to the remote. """ - self.load_system_host_keys() + def _configure(self): + """ Configure the ssh parameters from the config file. """ configfile = expanduser("~/.ssh/config") if not isfile(configfile): raise GerritError("ssh config file '%s' does not exist" % @@ -88,21 +90,29 @@ class GerritSSHClient(SSHClient): raise GerritError("No ssh config for host %s" % self.hostname) if not 'hostname' in data or not 'port' in data or not 'user' in data: raise GerritError("Missing configuration data in %s" % configfile) - key_filename = None + self.hostname = data['hostname'] + self.username = data['user'] if 'identityfile' in data: key_filename = abspath(expanduser(data['identityfile'][0])) if not isfile(key_filename): raise GerritError("Identity file '%s' does not exist" % key_filename) + self.key_filename = key_filename try: - port = int(data['port']) + self.port = int(data['port']) except ValueError: raise GerritError("Invalid port: %s" % data['port']) + + def _do_connect(self): + """ Connect to the remote. """ + self.load_system_host_keys() + if self.username is None or self.port is None: + self._configure() try: - self.connect(hostname=data['hostname'], - port=port, - username=data['user'], - key_filename=key_filename) + self.connect(hostname=self.hostname, + port=self.port, + username=self.username, + key_filename=self.key_filename) except socket.error as e: raise GerritError("Failed to connect to server: %s" % e) |
