diff --git a/fdroidserver/verify.py b/fdroidserver/verify.py index 41b90c2e..c10f882e 100644 --- a/fdroidserver/verify.py +++ b/fdroidserver/verify.py @@ -49,6 +49,9 @@ def main(): print "No unsigned directory - nothing to do" sys.exit(0) + verified = 0 + notverified = 0 + for apkfile in sorted(glob.glob(os.path.join(unsigned_dir, '*.apk'))): apkfilename = os.path.basename(apkfile) @@ -56,50 +59,57 @@ def main(): if i == -1: raise BuildException("Invalid apk name") appid = apkfilename[:i] - print "Processing " + apkfilename if not options.package or options.package == appid: - remoteapk = os.path.join(tmp_dir, apkfilename) - if os.path.exists(remoteapk): - os.remove(remoteapk) - url = 'https://f-droid.org/repo/' + apkfilename - print "...retrieving " + url - p = subprocess.Popen(['wget', url], - cwd=tmp_dir, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - out = p.communicate()[0] - if p.returncode != 0: - print "Failed to get " + apkfilename - sys.exit(1) + try: - thisdir = os.path.join(tmp_dir, 'this_apk') - thatdir = os.path.join(tmp_dir, 'that_apk') - for d in [thisdir, thatdir]: - if os.path.exists(d): - shutil.rmtree(d) - os.mkdir(d) + print "Processing " + apkfilename - if subprocess.call(['jar', 'xf', - os.path.join("..", "..", unsigned_dir, apkfilename)], - cwd=thisdir) != 0: - print "Failed to unpack local build of " + apkfilename - sys.exit(1) - if subprocess.call(['jar', 'xf', os.path.join("..", "..", remoteapk)], - cwd=thatdir) != 0: - print "Failed to unpack remote build of " + apkfilename - sys.exit(1) + remoteapk = os.path.join(tmp_dir, apkfilename) + if os.path.exists(remoteapk): + os.remove(remoteapk) + url = 'https://f-droid.org/repo/' + apkfilename + print "...retrieving " + url + p = subprocess.Popen(['wget', url], + cwd=tmp_dir, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + out = p.communicate()[0] + if p.returncode != 0: + raise Exception("Failed to get " + apkfilename) - p = subprocess.Popen(['diff', '-r', 'this_apk', 'that_apk'], - cwd=tmp_dir, stdout=subprocess.PIPE) - out = p.communicate()[0] - lines = out.splitlines() - if len(lines) != 1 or lines[0].find('META-INF') == -1: - print "Unexpected diff output" - print out - sys.exit(1) + thisdir = os.path.join(tmp_dir, 'this_apk') + thatdir = os.path.join(tmp_dir, 'that_apk') + for d in [thisdir, thatdir]: + if os.path.exists(d): + shutil.rmtree(d) + os.mkdir(d) - print "...successfully verified" + if subprocess.call(['jar', 'xf', + os.path.join("..", "..", unsigned_dir, apkfilename)], + cwd=thisdir) != 0: + raise Exception("Failed to unpack local build of " + apkfilename) + if subprocess.call(['jar', 'xf', os.path.join("..", "..", remoteapk)], + cwd=thatdir) != 0: + raise Exception("Failed to unpack remote build of " + apkfilename) + + p = subprocess.Popen(['diff', '-r', 'this_apk', 'that_apk'], + cwd=tmp_dir, stdout=subprocess.PIPE) + out = p.communicate()[0] + lines = out.splitlines() + if len(lines) != 1 or lines[0].find('META-INF') == -1: + raise Exception("Unexpected diff output - " + out) + + print "...successfully verified" + verified += 1 + + except Exception, e: + print "...NOT verified - {0}".format(e) + notverified += 1 + + print "\nFinished" + print "{0} successfully verified".format(verified) + print "{0} NOT verified".format(notverified) if __name__ == "__main__": main()