mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-10 17:30:11 +01:00
deploy: lists for command lines to handle escaping
fdroidserver uses lists of strings to handle the escaping command line arguments, this converts the rclone code to that pattern.
This commit is contained in:
parent
5126a58af8
commit
fe3d929f67
@ -30,7 +30,6 @@ from git import Repo
|
||||
import yaml
|
||||
from argparse import ArgumentParser
|
||||
import logging
|
||||
from shlex import split
|
||||
import pathlib
|
||||
import shutil
|
||||
import git
|
||||
@ -272,7 +271,7 @@ def update_remote_storage_with_rclone(
|
||||
logging.info('Custom configuration not found.')
|
||||
logging.info(
|
||||
'Using default configuration at {}'.format(
|
||||
subprocess.check_output(split("rclone config file")).decode("utf-8")
|
||||
subprocess.check_output(['rclone', 'config', 'file'], text=True)
|
||||
)
|
||||
)
|
||||
configfilename = None
|
||||
@ -281,7 +280,7 @@ def update_remote_storage_with_rclone(
|
||||
logging.info('Custom configuration not found.')
|
||||
logging.info(
|
||||
'Using default configuration at {}'.format(
|
||||
subprocess.check_output(split("rclone config file")).decode("utf-8")
|
||||
subprocess.check_output(['rclone', 'config', 'file'], text=True)
|
||||
)
|
||||
)
|
||||
configfilename = None
|
||||
@ -306,18 +305,8 @@ def update_remote_storage_with_rclone(
|
||||
|
||||
for source in sources:
|
||||
for remote_config in rclone_config:
|
||||
rclone_sync_command = (
|
||||
'rclone sync '
|
||||
+ source
|
||||
+ ' '
|
||||
+ config['rclone_config']
|
||||
+ ':'
|
||||
+ config['awsbucket']
|
||||
+ '/'
|
||||
+ upload_dir
|
||||
)
|
||||
|
||||
rclone_sync_command = split(rclone_sync_command)
|
||||
complete_remote_path = f'{remote_config}:{config["awsbucket"]}/{upload_dir}'
|
||||
rclone_sync_command = ['rclone', 'sync', source, complete_remote_path]
|
||||
|
||||
if verbose:
|
||||
rclone_sync_command += ['--verbose']
|
||||
@ -325,11 +314,7 @@ def update_remote_storage_with_rclone(
|
||||
rclone_sync_command += ['--quiet']
|
||||
|
||||
if configfilename:
|
||||
rclone_sync_command += split('--config=' + configfilename)
|
||||
|
||||
complete_remote_path = (
|
||||
config['rclone_config'] + ':' + config['awsbucket'] + '/' + upload_dir
|
||||
)
|
||||
rclone_sync_command += ['--config=' + configfilename]
|
||||
|
||||
logging.debug(
|
||||
"rclone sync all files in " + source + ' to ' + complete_remote_path
|
||||
|
@ -194,6 +194,31 @@ class DeployTest(unittest.TestCase):
|
||||
self.assertFalse(dest_apk.is_file())
|
||||
self.assertTrue(dest_index.is_file())
|
||||
|
||||
@mock.patch('subprocess.call')
|
||||
@mock.patch('subprocess.check_output', lambda cmd, text: '/path/to/rclone.conf')
|
||||
def test_update_remote_storage_with_rclone_mock(self, mock_call):
|
||||
def _mock_subprocess_call(cmd):
|
||||
self.assertEqual(
|
||||
cmd,
|
||||
[
|
||||
'rclone',
|
||||
'sync',
|
||||
'repo',
|
||||
'test_local_config:test_bucket_folder/fdroid/repo',
|
||||
],
|
||||
)
|
||||
return 0
|
||||
|
||||
mock_call.side_effect = _mock_subprocess_call
|
||||
|
||||
fdroidserver.deploy.config = {
|
||||
'awsbucket': 'test_bucket_folder',
|
||||
'rclone': True,
|
||||
'rclone_config': 'test_local_config',
|
||||
}
|
||||
fdroidserver.deploy.update_remote_storage_with_rclone('repo')
|
||||
mock_call.assert_called_once()
|
||||
|
||||
def test_update_serverwebroot(self):
|
||||
"""rsync works with file paths, so this test uses paths for the URLs"""
|
||||
os.chdir(self.testdir)
|
||||
|
Loading…
Reference in New Issue
Block a user