chiark / gitweb /
Merge branch 'some-compatibility-fixes' of https://gitlab.com/eighthave/fdroidserver
authorDaniel Martí <mvdan@mvdan.cc>
Mon, 27 Jul 2015 17:41:23 +0000 (10:41 -0700)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 27 Jul 2015 17:41:23 +0000 (10:41 -0700)
fdroidserver/build.py
fdroidserver/common.py
fdroidserver/update.py
fdroidserver/verify.py
setup.py

index d29901bb006830cbc46bedbb77d8d1ce0a0f6b05..84af7f41c5b0497e422a36bf6aa7833771a59227 100644 (file)
@@ -1090,9 +1090,7 @@ def main():
                         logging.info("...retrieving " + url)
                         of = "{0}_{1}.apk.binary".format(app['id'], thisbuild['vercode'])
                         of = os.path.join(output_dir, of)
-                        p = FDroidPopen(['wget', '-nv', '-O', of, url])
-                        if p.returncode != 0 or not os.path.exists(of):
-                            raise BuildException("...failed to retrieve " + url)
+                        common.download_file(url, local_filename=of)
 
                     build_succeeded.append(app)
                     wikilog = "Build succeeded"
index d427c0d0b596f8dfdc6c94a04841d6795e099575..3c672728a860544a7d74a72783503927e93b8cc9 100644 (file)
@@ -22,6 +22,7 @@ import sys
 import re
 import shutil
 import glob
+import requests
 import stat
 import subprocess
 import time
@@ -70,8 +71,8 @@ default_config = {
     'keystore': 'keystore.jks',
     'smartcardoptions': [],
     'char_limits': {
-        'Summary': 50,
-        'Description': 1500
+        'Summary': 80,
+        'Description': 4000
     },
     'keyaliases': {},
     'repo_url': "https://MyFirstFDroidRepo.org/fdroid/repo",
@@ -2072,3 +2073,17 @@ def string_is_integer(string):
         return True
     except ValueError:
         return False
+
+
+def download_file(url, local_filename=None, dldir='tmp'):
+    filename = url.split('/')[-1]
+    if local_filename is None:
+        local_filename = os.path.join(dldir, filename)
+    # the stream=True parameter keeps memory usage low
+    r = requests.get(url, stream=True)
+    with open(local_filename, 'wb') as f:
+        for chunk in r.iter_content(chunk_size=1024):
+            if chunk:  # filter out keep-alive new chunks
+                f.write(chunk)
+                f.flush()
+    return local_filename
index 5afa87585145a59611ac1089d0508c2024d0366f..17694f0d51e19cdccab5c3932ae0dd5480daf3d0 100644 (file)
@@ -27,6 +27,7 @@ import socket
 import zipfile
 import hashlib
 import pickle
+from datetime import datetime, timedelta
 from xml.dom.minidom import Document
 from optparse import OptionParser
 import time
@@ -542,6 +543,19 @@ def scan_apks(apps, apkcache, repodir, knownapks):
 
             apk = zipfile.ZipFile(apkfile, 'r')
 
+            # if an APK has files newer than the system time, suggest updating
+            # the system clock.  This is useful for offline systems, used for
+            # signing, which do not have another source of clock sync info. It
+            # has to be more than 24 hours newer because ZIP/APK files do not
+            # store timezone info
+            info = apk.getinfo('AndroidManifest.xml')
+            dt_obj = datetime(*info.date_time)
+            checkdt = dt_obj - timedelta(1)
+            if datetime.today() < checkdt:
+                logging.warn('System clock is older than manifest in: '
+                             + apkfilename + '\nSet clock to that time using:\n'
+                             + 'sudo date -s "' + str(dt_obj) + '"')
+
             iconfilename = "%s.%s.png" % (
                 thisinfo['id'],
                 thisinfo['versioncode'])
index 9139d37ac06e7e96a30f32a3638d9281a4de16dc..fd0464ebddf78c2ca7107e857bd0b18a23463902 100644 (file)
@@ -24,7 +24,7 @@ from optparse import OptionParser
 import logging
 
 import common
-from common import FDroidPopen, FDroidException
+from common import FDroidException
 
 options = None
 config = None
@@ -78,9 +78,7 @@ def main():
                 os.remove(remoteapk)
             url = 'https://f-droid.org/repo/' + apkfilename
             logging.info("...retrieving " + url)
-            p = FDroidPopen(['wget', '-nv', url], cwd=tmp_dir)
-            if p.returncode != 0:
-                raise FDroidException("Failed to get " + apkfilename)
+            common.download_file(url, dldir=tmp_dir)
 
             compare_result = common.compare_apks(
                 os.path.join(unsigned_dir, apkfilename),
index 49281d9ebe0e6a9058517e55c228a02eaf96868e..bfd5d106a42960e539206f038ff2708c2690a8fd 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -28,6 +28,7 @@ setup(name='fdroidserver',
           'apache-libcloud >= 0.14.1',
           'pyasn1',
           'pyasn1-modules',
+          'requests',
       ],
       classifiers=[
           'Development Status :: 3 - Alpha',