From: Ciaran Gultnieks Date: Sun, 11 Jan 2015 18:22:00 +0000 (+0000) Subject: Detect apk cache changes to avoid having to blow the whole thing X-Git-Tag: 0.4.0~143 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b5ed40684f4e9c845a33732a2c6e79345159ccb6;p=fdroidserver.git Detect apk cache changes to avoid having to blow the whole thing --- diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 57587f52..06580ed5 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -421,14 +421,30 @@ def scan_apks(apps, apkcache, repodir, knownapks): logging.critical("Spaces in filenames are not allowed.") sys.exit(1) + # Calculate the sha256... + sha = hashlib.sha256() + with open(apkfile, 'rb') as f: + while True: + t = f.read(16384) + if len(t) == 0: + break + sha.update(t) + shasum = sha.hexdigest() + + usecache = False if apkfilename in apkcache: - logging.debug("Reading " + apkfilename + " from cache") thisinfo = apkcache[apkfilename] + if thisinfo['sha256'] == shasum: + logging.debug("Reading " + apkfilename + " from cache") + usecache = True + else: + logging.debug("Ignoring stale cache data for " + apkfilename) - else: + if not usecache: logging.debug("Processing " + apkfilename) thisinfo = {} thisinfo['apkname'] = apkfilename + thisinfo['sha256'] = shasum srcfilename = apkfilename[:-4] + "_src.tar.gz" if os.path.exists(os.path.join(repodir, srcfilename)): thisinfo['srcname'] = srcfilename @@ -514,16 +530,6 @@ def scan_apks(apps, apkcache, repodir, knownapks): if common.isApkDebuggable(apkfile, config): logging.warn('{0} is set to android:debuggable="true"'.format(apkfile)) - # Calculate the sha256... - sha = hashlib.sha256() - with open(apkfile, 'rb') as f: - while True: - t = f.read(1024) - if len(t) == 0: - break - sha.update(t) - thisinfo['sha256'] = sha.hexdigest() - # Get the signature (or md5 of, to be precise)... thisinfo['sig'] = getsig(os.path.join(os.getcwd(), apkfile)) if not thisinfo['sig']: