From c137231d8bd47017bf17833c8f97693645be3dee Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 24 Apr 2017 16:22:33 -0300 Subject: [PATCH] Make git server mirror upload honor config['identity_file'] option --- examples/config.py | 2 +- fdroidserver/server.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/examples/config.py b/examples/config.py index b41ca4ac..0a0558b3 100644 --- a/examples/config.py +++ b/examples/config.py @@ -181,7 +181,7 @@ The repository of older versions of applications from the main demo repository. # 'http://foobarfoobarfoobar.onion/fdroid', # ) -# optionally specific which identity file to use when using rsync over SSH +# optionally specify which identity file to use when using rsync or git over SSH # # identity_file = '~/.ssh/fdroid_id_rsa' diff --git a/fdroidserver/server.py b/fdroidserver/server.py index 31b7adc0..fb20148d 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -216,9 +216,9 @@ def update_serverwebroot(serverwebroot, repo_section): if options.quiet: rsyncargs += ['--quiet'] if options.identity_file is not None: - rsyncargs += ['-e', 'ssh -i ' + options.identity_file] - if 'identity_file' in config: - rsyncargs += ['-e', 'ssh -i ' + config['identity_file']] + rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file] + elif 'identity_file' in config: + rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file']] indexxml = os.path.join(repo_section, 'index.xml') indexjar = os.path.join(repo_section, 'index.jar') indexv1jar = os.path.join(repo_section, 'index-v1.jar') @@ -334,6 +334,13 @@ def update_servergitmirrors(servergitmirrors, repo_section): fdroid_repo_path = os.path.join(git_mirror_path, "fdroid") _local_sync(repo_section, fdroid_repo_path) + # use custom SSH command if identity_file specified + ssh_cmd = 'ssh -oBatchMode=yes' + if options.identity_file is not None: + ssh_cmd += ' -oIdentitiesOnly=yes -i "%s"' % options.identity_file + elif 'identity_file' in config: + ssh_cmd += ' -oIdentitiesOnly=yes -i "%s"' % config['identity_file'] + repo = git.Repo.init(git_mirror_path) for mirror in servergitmirrors: @@ -360,7 +367,8 @@ def update_servergitmirrors(servergitmirrors, repo_section): # push for every remote. This will overwrite the git history for remote in repo.remotes: logging.debug('Pushing to ' + remote.url) - remote.push('master', force=True, set_upstream=True, progress=progress) + with repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd): + remote.push('master', force=True, set_upstream=True, progress=progress) if progress: bar.done() -- 2.30.2