chiark / gitweb /
remove dependency on wget for 'build' and 'verify'
authorHans-Christoph Steiner <hans@eds.org>
Fri, 24 Jul 2015 04:42:21 +0000 (21:42 -0700)
committerHans-Christoph Steiner <hans@eds.org>
Fri, 24 Jul 2015 18:53:14 +0000 (11:53 -0700)
To make the core tools portable to platforms like Mac OS X and Windows,
remove the dependency on wget and instead use Python Requests, which
probably has better performance anyway.

fdroidserver/build.py
fdroidserver/common.py
fdroidserver/verify.py
setup.py

index 7514e81a39d9def8600b2ee47b7b4acbac9820dd..e6ac33994d86b1b8dc2acda39abb74855b62bca2 100644 (file)
@@ -1088,9 +1088,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 5dc989117e874bcd0fcffc87dc5eb307605384e8..9daddb9c7b7e852e6448234926ed2de25f49531d 100644 (file)
@@ -22,6 +22,7 @@ import sys
 import re
 import shutil
 import glob
+import requests
 import stat
 import subprocess
 import time
@@ -2070,3 +2071,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 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',