1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-09 00:40:11 +01:00

Merge branch 'debug-builds' into 'master'

support plain paths as a serverwebroot

For use cases where there is a web server running on the same machine where the `fdroid update` is being run, allow plain paths in the serverwebroot list.  This is useful for debug repos from build servers, like:

https://dev.guardianproject.info/fdroid

This also includes small change in the `fdroid server update` delete behavior: it delays the delete phase until after the new APKs are uploaded.  This is keep things working for a long as possible while the repo is being updated.

See merge request !49
This commit is contained in:
Ciaran Gultnieks 2015-05-14 16:11:32 +00:00
commit 82ab109066

View File

@ -123,7 +123,7 @@ def update_awsbucket(repo_section):
def update_serverwebroot(serverwebroot, repo_section): def update_serverwebroot(serverwebroot, repo_section):
# use a checksum comparison for accurate comparisons on different # use a checksum comparison for accurate comparisons on different
# filesystems, for example, FAT has a low resolution timestamp # filesystems, for example, FAT has a low resolution timestamp
rsyncargs = ['rsync', '--archive', '--delete', '--safe-links'] rsyncargs = ['rsync', '--archive', '--delete-after', '--safe-links']
if not options.no_checksum: if not options.no_checksum:
rsyncargs.append('--checksum') rsyncargs.append('--checksum')
if options.verbose: if options.verbose:
@ -136,13 +136,14 @@ def update_serverwebroot(serverwebroot, repo_section):
rsyncargs += ['-e', 'ssh -i ' + config['identity_file']] rsyncargs += ['-e', 'ssh -i ' + config['identity_file']]
indexxml = os.path.join(repo_section, 'index.xml') indexxml = os.path.join(repo_section, 'index.xml')
indexjar = os.path.join(repo_section, 'index.jar') indexjar = os.path.join(repo_section, 'index.jar')
# upload the first time without the index so that the repo stays working # Upload the first time without the index files and delay the deletion as
# while this update is running. Then once it is complete, rerun the # much as possible, that keeps the repo functional while this update is
# command again to upload the index. Always using the same target with # running. Then once it is complete, rerun the command again to upload
# rsync allows for very strict settings on the receiving server, you can # the index files. Always using the same target with rsync allows for
# literally specify the one rsync command that is allowed to run in # very strict settings on the receiving server, you can literally specify
# ~/.ssh/authorized_keys. (serverwebroot is guaranteed to have a trailing # the one rsync command that is allowed to run in ~/.ssh/authorized_keys.
# slash in common.py) # (serverwebroot is guaranteed to have a trailing slash in common.py)
logging.info('rsyncing ' + repo_section + ' to ' + serverwebroot)
if subprocess.call(rsyncargs + if subprocess.call(rsyncargs +
['--exclude', indexxml, '--exclude', indexjar, ['--exclude', indexxml, '--exclude', indexjar,
repo_section, serverwebroot]) != 0: repo_section, serverwebroot]) != 0:
@ -225,7 +226,15 @@ def main():
standardwebroot = True standardwebroot = True
for serverwebroot in config.get('serverwebroot', []): for serverwebroot in config.get('serverwebroot', []):
host, fdroiddir = serverwebroot.rstrip('/').split(':') # this supports both an ssh host:path and just a path
s = serverwebroot.rstrip('/').split(':')
if len(s) == 1:
fdroiddir = s[0]
elif len(s) == 2:
host, fdroiddir = s
else:
logging.error('Malformed serverwebroot line: ' + serverwebroot)
sys.exit(1)
repobase = os.path.basename(fdroiddir) repobase = os.path.basename(fdroiddir)
if standardwebroot and repobase != 'fdroid': if standardwebroot and repobase != 'fdroid':
logging.error('serverwebroot path does not end with "fdroid", ' logging.error('serverwebroot path does not end with "fdroid", '