From: Hans-Christoph Steiner Date: Thu, 3 Jul 2014 00:54:52 +0000 (-0400) Subject: server init: replace ssh subprocess with paramiko X-Git-Tag: 0.2.1~11^2~3 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c7962e7c6d3952bf809cb53399660349f975943f;p=fdroidserver.git server init: replace ssh subprocess with paramiko It is easier to handle programming with python rather than subprocess calls so I replaced the subprocess call to 'ssh' with paramiko. This also makes fdroid more portable since it no longer relies on the local system having ssh installed. --- diff --git a/fdroidserver/server.py b/fdroidserver/server.py index 4e902304..0911b5be 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -20,6 +20,8 @@ import sys import hashlib import os +import paramiko +import pwd import subprocess from optparse import OptionParser import logging @@ -255,17 +257,26 @@ def main(): if args[0] == 'init': if config.get('serverwebroot'): - sshargs = ['ssh'] - if options.quiet: - sshargs += ['-q'] + ssh = paramiko.SSHClient() + ssh.load_system_host_keys() + sshstr, remotepath = config['serverwebroot'].rstrip('/').split(':') + if sshstr.find('@') >= 0: + username, hostname = sshstr.split('@') + else: + username = pwd.getpwuid(os.getuid())[0] # get effective uid + hostname = sshstr + ssh.connect(hostname, username=username) + sftp = ssh.open_sftp() + if os.path.basename(remotepath) \ + not in sftp.listdir(os.path.dirname(remotepath)): + sftp.mkdir(remotepath, mode=0755) for repo_section in repo_sections: - cmd = sshargs + [host, 'mkdir -p', fdroiddir + '/' + repo_section] - if options.verbose: - # ssh -v produces different output than rsync -v, so this - # simulates rsync -v - logging.info(' '.join(cmd)) - if subprocess.call(cmd) != 0: - sys.exit(1) + repo_path = os.path.join(remotepath, repo_section) + if os.path.basename(repo_path) \ + not in sftp.listdir(remotepath): + sftp.mkdir(repo_path, mode=0755) + sftp.close() + ssh.close() elif args[0] == 'update': for repo_section in repo_sections: if local_copy_dir is not None: