chiark / gitweb /
Make FDroidPopen a lot simpler, pythonize a few things
authorDaniel Martí <mvdan@mvdan.cc>
Mon, 4 Nov 2013 19:19:31 +0000 (20:19 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Mon, 4 Nov 2013 19:19:31 +0000 (20:19 +0100)
fdroidserver/build.py
fdroidserver/common.py

index d992a260f677a20cf6a536ddde4e1af19640fbc9..3ed667088874dff744390a649f6dc91dbf4b8038 100644 (file)
@@ -485,7 +485,7 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
         if 'mvnflags' in thisbuild:
             mvncmd += thisbuild['mvnflags']
 
-        p = FDroidPopen(mvncmd, cwd=maven_dir, apkoutput=True)
+        p = FDroidPopen(mvncmd, cwd=maven_dir)
 
     elif 'gradle' in thisbuild:
         print "Building Gradle project..."
@@ -537,7 +537,7 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
             cmd += [thisbuild['antcommand']]
         else:
             cmd += ['release']
-        p = FDroidPopen(cmd, cwd=root_dir, apkoutput=True)
+        p = FDroidPopen(cmd, cwd=root_dir)
 
     if p.returncode != 0:
         raise BuildException("Build failed for %s:%s" % (app['id'], thisbuild['version']), p.stdout, p.stderr)
@@ -554,15 +554,17 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
     else:
         bindir = os.path.join(root_dir, 'bin')
     if 'maven' in thisbuild:
+        stdout_apk = '\n'.join([
+            line for line in p.stdout.splitlines() if 'apk' in line])
         m = re.match(r".*^\[INFO\] .*apkbuilder.*/([^/]*)\.apk",
-                p.stdout_apk, re.S|re.M)
+                stdout_apk, re.S|re.M)
         if not m:
             m = re.match(r".*^\[INFO\] Creating additional unsigned apk file .*/([^/]+)\.apk[^l]",
-                    p.stdout_apk, re.S|re.M)
+                    stdout_apk, re.S|re.M)
         if not m:
             # This format is found in com.github.mobile, com.yubico.yubitotp and com.botbrew.basil for example...
             m = re.match(r'.*^\[INFO\] [^$]*aapt \[package,[^$]*' + bindir + '/([^/]+)\.ap[_k][,\]]',
-                    p.stdout_apk, re.S|re.M)
+                    stdout_apk, re.S|re.M)
         if not m:
             raise BuildException('Failed to find output')
         src = m.group(1)
@@ -577,7 +579,9 @@ def build_local(app, thisbuild, vcs, build_dir, output_dir, srclib_dir, extlib_d
             name = '-'.join([os.path.basename(dd), flavour, 'release', 'unsigned'])
         src = os.path.join(dd, 'build', 'apk', name+'.apk')
     else:
-        src = re.match(r".*^.*Creating (.+) for release.*$.*", p.stdout_apk,
+        stdout_apk = '\n'.join([
+            line for line in p.stdout.splitlines() if 'apk' in line])
+        src = re.match(r".*^.*Creating (.+) for release.*$.*", stdout_apk,
             re.S|re.M).group(1)
         src = os.path.join(bindir, src)
 
index 77ed1995e2b9f80de83c7f7d2919da92d20b2e55..fd84d7c532c6e8d805019e8225d92067f1a19b94 100644 (file)
@@ -1406,9 +1406,8 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, sdk_path,
             and build.get('gradle', 'no') == 'no'):
         parms = [os.path.join(sdk_path, 'tools', 'android'),
                 'update', 'project']
-        if 'target' in build:
-            parms.append('-t')
-            parms.append(build['target'])
+        if 'target' in build and build['target']:
+            parms += ['-t', build['target']]
         update_dirs = None
         if updatemode == 'auto':
             update_dirs = ['.'] + ant_subprojects(root_dir)
@@ -1859,9 +1858,7 @@ class KnownApks:
                 else:
                     apps[appid] = added
         sortedapps = sorted(apps.iteritems(), key=operator.itemgetter(1))[-num:]
-        lst = []
-        for app, added in sortedapps:
-            lst.append(app)
+        lst = [app for app,added in sortedapps]
         lst.reverse()
         return lst
 
@@ -1913,13 +1910,11 @@ class PopenResult:
     stderr = ''
     stdout_apk = ''
 
-def FDroidPopen(commands, cwd,
-        stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-        apkoutput=False):
+def FDroidPopen(commands, cwd):
     """
     Runs a command the FDroid way and returns return code and output
 
-    :param commands, cwd, stdout, stderr: like subprocess.Popen
+    :param commands, cwd: like subprocess.Popen
     """
 
     if options.verbose:
@@ -1927,7 +1922,8 @@ def FDroidPopen(commands, cwd,
         print " > %s" % ' '.join(commands)
 
     result = PopenResult()
-    p = subprocess.Popen(commands, cwd=cwd, stdout=stdout, stderr=stderr)
+    p = subprocess.Popen(commands, cwd=cwd,
+            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     
     stdout_queue = Queue.Queue()
     stdout_reader = AsynchronousFileReader(p.stdout, stdout_queue)
@@ -1945,8 +1941,6 @@ def FDroidPopen(commands, cwd,
                 # Output directly to console
                 sys.stdout.write(line)
                 sys.stdout.flush()
-            if apkoutput and 'apk' in line:
-                result.stdout_apk += line
             result.stdout += line
 
         # Show what we received from standard error