From 3638edd252e24ec2f0fbfb24c53fed6e158d10ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Mon, 4 Nov 2013 20:19:31 +0100 Subject: [PATCH] Make FDroidPopen a lot simpler, pythonize a few things --- fdroidserver/build.py | 16 ++++++++++------ fdroidserver/common.py | 20 +++++++------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index d992a260..3ed66708 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -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) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 77ed1995..fd84d7c5 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -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