1
0
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:
Hans-Christoph Steiner 2024-06-12 09:38:15 +02:00
parent 5126a58af8
commit fe3d929f67
2 changed files with 30 additions and 20 deletions

View File

@ -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

View File

@ -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)