deploy: give useful error if rsync is not installed

This commit is contained in:
Hans-Christoph Steiner 2023-06-01 20:23:00 +02:00
parent ed50de055a
commit 00aa595f37
2 changed files with 14 additions and 0 deletions

View File

@ -277,6 +277,12 @@ def update_serverwebroot(serverwebroot, repo_section):
has a low resolution timestamp
"""
try:
subprocess.run(['rsync', '--version'], capture_output=True, check=True)
except Exception as e:
raise FDroidException(
_('rsync is missing or broken: {error}').format(error=e)
) from e
rsyncargs = ['rsync', '--archive', '--delete-after', '--safe-links']
if not options.no_checksum:
rsyncargs.append('--checksum')

View File

@ -18,6 +18,7 @@ if localmodule not in sys.path:
import fdroidserver.common
import fdroidserver.deploy
from fdroidserver.exception import FDroidException
from testcommon import TmpCwd, mkdtemp
@ -56,6 +57,13 @@ class DeployTest(unittest.TestCase):
fdroidserver.deploy.update_serverwebroot(str(serverwebroot), 'repo')
self.assertTrue(dest_apk.is_file())
@mock.patch.dict(os.environ, clear=True)
def test_update_serverwebroot_no_rsync_error(self):
os.environ['PATH'] = self.testdir
os.chdir(self.testdir)
with self.assertRaises(FDroidException):
fdroidserver.deploy.update_serverwebroot('serverwebroot', 'repo')
def test_update_serverwebroot_make_cur_version_link(self):
# setup parameters for this test run
fdroidserver.deploy.options.no_checksum = True