From: Daniel Martí Date: Wed, 11 Dec 2013 18:08:15 +0000 (+0100) Subject: Only install latest apk of each app, other fixes X-Git-Tag: 0.1~107 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=21db79eea2371582d5dda55034c3093037193274;p=fdroidserver.git Only install latest apk of each app, other fixes --- diff --git a/fdroidserver/build.py b/fdroidserver/build.py index a5d9dba8..1afd6209 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -877,6 +877,15 @@ def main(): allapps = metadata.read_metadata(xref=not options.onserver) apps = common.read_app_args(args, options, allapps) + apps = [app for app in apps if (options.force or not app['Disabled']) and + len(app['Repo Type']) > 0 and len(app['builds']) > 0] + + if len(apps) == 0: + raise Exception("No apps to process.") + + if options.latest: + for app in apps: + app['builds'] = app['builds'][-1:] if options.wiki: import mwclient diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 14cdcec0..30cae4da 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -111,36 +111,31 @@ def read_config(opts, config_file='config.py'): return config def read_app_args(args, options, allapps): - if args: - vercodes = {} - for p in args: - if ':' in p: - package, vercode = p.split(':') - else: - package, vercode = p, None - if package not in vercodes: - vercodes[package] = [vercode] if vercode else [] - continue - elif vercode not in vercodes[package]: - vercodes[package] += [vercode] if vercode else [] - packages = vercodes.keys() - apps = [app for app in allapps if app['id'] in packages] - if len(apps) != len(packages): - allids = [app["id"] for app in allapps] - for p in packages: - if p not in allids: - print "No such package: %s" % p - raise Exception("Found invalid app ids in arguments") - - if hasattr(options, "force"): - force = options.force - else: - force = False + if not args: + return [] - apps = [app for app in apps if (force or not app['Disabled']) and - app['builds'] and len(app['Repo Type']) > 0 and len(app['builds']) > 0] - if len(apps) == 0: - raise Exception("No apps to process.") + vercodes = {} + for p in args: + if ':' in p: + package, vercode = p.split(':') + else: + package, vercode = p, None + if package not in vercodes: + vercodes[package] = [vercode] if vercode else [] + continue + elif vercode not in vercodes[package]: + vercodes[package] += [vercode] if vercode else [] + packages = vercodes.keys() + apps = [app for app in allapps if app['id'] in packages] + if len(apps) != len(packages): + allids = [app["id"] for app in allapps] + for p in packages: + if p not in allids: + print "No such package: %s" % p + raise Exception("Found invalid app ids in arguments") + + if not vercodes: + return apps error = False for app in apps: @@ -153,8 +148,6 @@ def read_app_args(args, options, allapps): for v in vercodes[app['id']]: if v not in allvcs: print "No such vercode %s for app %s" % (v, app['id']) - elif options.latest: - app['builds'] = app['builds'][-1:] if error: raise Exception("Found invalid vercodes for some apps") diff --git a/fdroidserver/install.py b/fdroidserver/install.py index bef95e3a..fe468c11 100644 --- a/fdroidserver/install.py +++ b/fdroidserver/install.py @@ -59,26 +59,35 @@ def main(): apps = common.read_app_args(args, options, allapps) for app in apps: - for thisbuild in app['builds']: - apk = os.path.join(output_dir, common.getapkname(app, thisbuild)) - if not os.path.exists(apk): - raise Exception("No such signed apk: %s" % apk) - continue - # Get device list each time to avoid device not found errors - devs = devices() - if not devs: - raise Exception("No attached devices found") - print "Installing %s..." % apk - for dev in devs: - print "Installing %s on %s..." % (apk, dev) - p = FDroidPopen(["adb", "-s", dev, "install", apk ]) - fail= "" - for line in p.stdout.splitlines(): - if line.startswith("Failure"): - fail = line[9:-1] - if fail: - raise Exception("Failed to install %s on %s: %s" % ( - apk, dev, fail)) + last = None + for build in app['builds']: + apk = os.path.join(output_dir, common.getapkname(app, build)) + if os.path.exists(apk): + last = build + if last is None: + raise Exception("No available signed apks for %s" % app['id']) + + for app in apps: + build = app['builds'][0] + apk = os.path.join(output_dir, common.getapkname(app, build)) + if not os.path.exists(apk): + raise Exception("No such signed apk: %s" % apk) + continue + # Get device list each time to avoid device not found errors + devs = devices() + if not devs: + raise Exception("No attached devices found") + print "Installing %s..." % apk + for dev in devs: + print "Installing %s on %s..." % (apk, dev) + p = FDroidPopen(["adb", "-s", dev, "install", apk ]) + fail= "" + for line in p.stdout.splitlines(): + if line.startswith("Failure"): + fail = line[9:-1] + if fail: + raise Exception("Failed to install %s on %s: %s" % ( + apk, dev, fail)) print "\nFinished"