invalidate apkcache if the metadata version is different

When the metadata changes, different things will be stored about each APK.
So invalidate the cached info parsed from APKs if the cache's metadata
version does not match the metadata version of the currently running tools.
This commit is contained in:
Hans-Christoph Steiner 2016-06-15 16:34:10 +02:00
parent c11edc3022
commit 8e57f2737d

View file

@ -44,6 +44,8 @@ from . import metadata
from .common import FDroidPopen, FDroidPopenBytes, SdkToolsPopen from .common import FDroidPopen, FDroidPopenBytes, SdkToolsPopen
from .metadata import MetaDataException from .metadata import MetaDataException
METADATA_VERSION = 16
screen_densities = ['640', '480', '320', '240', '160', '120'] screen_densities = ['640', '480', '320', '240', '160', '120']
all_screen_densities = ['0'] + screen_densities all_screen_densities = ['0'] + screen_densities
@ -811,7 +813,7 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
for mirror in config.get('mirrors', []): for mirror in config.get('mirrors', []):
addElement('mirror', urllib.parse.urljoin(mirror, urlbasepath), doc, repoel) addElement('mirror', urllib.parse.urljoin(mirror, urlbasepath), doc, repoel)
repoel.setAttribute("version", "16") repoel.setAttribute("version", str(METADATA_VERSION))
repoel.setAttribute("timestamp", str(int(time.time()))) repoel.setAttribute("timestamp", str(int(time.time())))
nosigningkey = False nosigningkey = False
@ -1224,6 +1226,8 @@ def main():
if not options.clean and os.path.exists(apkcachefile): if not options.clean and os.path.exists(apkcachefile):
with open(apkcachefile, 'rb') as cf: with open(apkcachefile, 'rb') as cf:
apkcache = pickle.load(cf, encoding='utf-8') apkcache = pickle.load(cf, encoding='utf-8')
if apkcache.get("METADATA_VERSION") != METADATA_VERSION:
apkcache = {}
else: else:
apkcache = {} apkcache = {}
@ -1364,6 +1368,7 @@ def main():
f.write(data) f.write(data)
if cachechanged: if cachechanged:
apkcache["METADATA_VERSION"] = METADATA_VERSION
with open(apkcachefile, 'wb') as cf: with open(apkcachefile, 'wb') as cf:
pickle.dump(apkcache, cf) pickle.dump(apkcache, cf)