chiark / gitweb /
server: delay deleting on the server for as long as possible
authorHans-Christoph Steiner <hans@eds.org>
Fri, 1 May 2015 03:36:10 +0000 (23:36 -0400)
committerHans-Christoph Steiner <hans@eds.org>
Fri, 8 May 2015 20:11:29 +0000 (16:11 -0400)
In order to keep things working as much as possible during the update, the
rsync should only delete the obsolete APKs after it has finished uploading
the new APKs.

fdroidserver/server.py

index c5496dee8fdd2e23f37a768d9fddc26e65fcaa46..5a0a442a32e0f6b5899df9e1bd224967535dd102 100644 (file)
@@ -123,7 +123,7 @@ def update_awsbucket(repo_section):
 def update_serverwebroot(serverwebroot, repo_section):
     # use a checksum comparison for accurate comparisons on different
     # 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:
         rsyncargs.append('--checksum')
     if options.verbose:
@@ -136,13 +136,14 @@ def update_serverwebroot(serverwebroot, repo_section):
         rsyncargs += ['-e', 'ssh -i ' + config['identity_file']]
     indexxml = os.path.join(repo_section, 'index.xml')
     indexjar = os.path.join(repo_section, 'index.jar')
-    # upload the first time without the index so that the repo stays working
-    # while this update is running.  Then once it is complete, rerun the
-    # command again to upload the index.  Always using the same target with
-    # rsync allows for very strict settings on the receiving server, you can
-    # literally specify the one rsync command that is allowed to run in
-    # ~/.ssh/authorized_keys.  (serverwebroot is guaranteed to have a trailing
-    # slash in common.py)
+    # Upload the first time without the index files and delay the deletion as
+    # much as possible, that keeps the repo functional while this update is
+    # running.  Then once it is complete, rerun the command again to upload
+    # the index files.  Always using the same target with rsync allows for
+    # very strict settings on the receiving server, you can literally specify
+    # the one rsync command that is allowed to run in ~/.ssh/authorized_keys.
+    # (serverwebroot is guaranteed to have a trailing slash in common.py)
+    logging.info('rsyncing ' + repo_section + ' to ' + serverwebroot)
     if subprocess.call(rsyncargs +
                        ['--exclude', indexxml, '--exclude', indexjar,
                         repo_section, serverwebroot]) != 0: