mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-14 19:10:11 +01:00
Factor out code from update.main() to individual functions
This commit is contained in:
parent
3c9eeff7f3
commit
c484dc33be
@ -52,6 +52,9 @@ from .metadata import MetaDataException
|
|||||||
|
|
||||||
METADATA_VERSION = 18
|
METADATA_VERSION = 18
|
||||||
|
|
||||||
|
# less than the valid range of versionCode, i.e. Java's Integer.MIN_VALUE
|
||||||
|
UNSET_VERSION_CODE = -0x100000000
|
||||||
|
|
||||||
APK_NAME_PAT = re.compile(".*name='([a-zA-Z0-9._]*)'.*")
|
APK_NAME_PAT = re.compile(".*name='([a-zA-Z0-9._]*)'.*")
|
||||||
APK_VERCODE_PAT = re.compile(".*versionCode='([0-9]*)'.*")
|
APK_VERCODE_PAT = re.compile(".*versionCode='([0-9]*)'.*")
|
||||||
APK_VERNAME_PAT = re.compile(".*versionName='([^']*)'.*")
|
APK_VERNAME_PAT = re.compile(".*versionName='([^']*)'.*")
|
||||||
@ -433,6 +436,38 @@ def getsig(apkpath):
|
|||||||
return hashlib.md5(hexlify(cert_encoded)).hexdigest()
|
return hashlib.md5(hexlify(cert_encoded)).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def get_cache_file():
|
||||||
|
return os.path.join('tmp', 'apkcache')
|
||||||
|
|
||||||
|
|
||||||
|
def get_cache():
|
||||||
|
"""
|
||||||
|
Gather information about all the apk files in the repo directory,
|
||||||
|
using cached data if possible.
|
||||||
|
:return: apkcache
|
||||||
|
"""
|
||||||
|
apkcachefile = get_cache_file()
|
||||||
|
if not options.clean and os.path.exists(apkcachefile):
|
||||||
|
with open(apkcachefile, 'rb') as cf:
|
||||||
|
apkcache = pickle.load(cf, encoding='utf-8')
|
||||||
|
if apkcache.get("METADATA_VERSION") != METADATA_VERSION:
|
||||||
|
apkcache = {}
|
||||||
|
else:
|
||||||
|
apkcache = {}
|
||||||
|
|
||||||
|
return apkcache
|
||||||
|
|
||||||
|
|
||||||
|
def write_cache(apkcache):
|
||||||
|
apkcachefile = get_cache_file()
|
||||||
|
cache_path = os.path.dirname(apkcachefile)
|
||||||
|
if not os.path.exists(cache_path):
|
||||||
|
os.makedirs(cache_path)
|
||||||
|
apkcache["METADATA_VERSION"] = METADATA_VERSION
|
||||||
|
with open(apkcachefile, 'wb') as cf:
|
||||||
|
pickle.dump(apkcache, cf)
|
||||||
|
|
||||||
|
|
||||||
def get_icon_bytes(apkzip, iconsrc):
|
def get_icon_bytes(apkzip, iconsrc):
|
||||||
'''ZIP has no official encoding, UTF-* and CP437 are defacto'''
|
'''ZIP has no official encoding, UTF-* and CP437 are defacto'''
|
||||||
try:
|
try:
|
||||||
@ -1103,6 +1138,45 @@ def extract_pubkey():
|
|||||||
return hexlify(pubkey)
|
return hexlify(pubkey)
|
||||||
|
|
||||||
|
|
||||||
|
def apply_info_from_latest_apk(apps, apks):
|
||||||
|
"""
|
||||||
|
Some information from the apks needs to be applied up to the application level.
|
||||||
|
When doing this, we use the info from the most recent version's apk.
|
||||||
|
We deal with figuring out when the app was added and last updated at the same time.
|
||||||
|
"""
|
||||||
|
for appid, app in apps.items():
|
||||||
|
bestver = UNSET_VERSION_CODE
|
||||||
|
for apk in apks:
|
||||||
|
if apk['packageName'] == appid:
|
||||||
|
if apk['versionCode'] > bestver:
|
||||||
|
bestver = apk['versionCode']
|
||||||
|
bestapk = apk
|
||||||
|
|
||||||
|
if 'added' in apk:
|
||||||
|
if not app.added or apk['added'] < app.added:
|
||||||
|
app.added = apk['added']
|
||||||
|
if not app.lastUpdated or apk['added'] > app.lastUpdated:
|
||||||
|
app.lastUpdated = apk['added']
|
||||||
|
|
||||||
|
if not app.added:
|
||||||
|
logging.debug("Don't know when " + appid + " was added")
|
||||||
|
if not app.lastUpdated:
|
||||||
|
logging.debug("Don't know when " + appid + " was last updated")
|
||||||
|
|
||||||
|
if bestver == UNSET_VERSION_CODE:
|
||||||
|
|
||||||
|
if app.Name is None:
|
||||||
|
app.Name = app.AutoName or appid
|
||||||
|
app.icon = None
|
||||||
|
logging.debug("Application " + appid + " has no packages")
|
||||||
|
else:
|
||||||
|
if app.Name is None:
|
||||||
|
app.Name = bestapk['name']
|
||||||
|
app.icon = bestapk['icon'] if 'icon' in bestapk else None
|
||||||
|
if app.CurrentVersionCode is None:
|
||||||
|
app.CurrentVersionCode = str(bestver)
|
||||||
|
|
||||||
|
|
||||||
# Get raw URL from git service for mirroring
|
# Get raw URL from git service for mirroring
|
||||||
def get_raw_mirror(url):
|
def get_raw_mirror(url):
|
||||||
# Divide urls in parts
|
# Divide urls in parts
|
||||||
@ -1839,17 +1913,10 @@ def main():
|
|||||||
# Read known apks data (will be updated and written back when we've finished)
|
# Read known apks data (will be updated and written back when we've finished)
|
||||||
knownapks = common.KnownApks()
|
knownapks = common.KnownApks()
|
||||||
|
|
||||||
# Gather information about all the apk files in the repo directory, using
|
# Get APK cache
|
||||||
# cached data if possible.
|
apkcache = get_cache()
|
||||||
apkcachefile = os.path.join('tmp', 'apkcache')
|
|
||||||
if not options.clean and os.path.exists(apkcachefile):
|
|
||||||
with open(apkcachefile, 'rb') as cf:
|
|
||||||
apkcache = pickle.load(cf, encoding='utf-8')
|
|
||||||
if apkcache.get("METADATA_VERSION") != METADATA_VERSION:
|
|
||||||
apkcache = {}
|
|
||||||
else:
|
|
||||||
apkcache = {}
|
|
||||||
|
|
||||||
|
# Delete builds for disabled apps
|
||||||
delete_disabled_builds(apps, apkcache, repodirs)
|
delete_disabled_builds(apps, apkcache, repodirs)
|
||||||
|
|
||||||
# Scan all apks in the main repo
|
# Scan all apks in the main repo
|
||||||
@ -1909,44 +1976,8 @@ def main():
|
|||||||
else:
|
else:
|
||||||
archapks = []
|
archapks = []
|
||||||
|
|
||||||
# less than the valid range of versionCode, i.e. Java's Integer.MIN_VALUE
|
# Apply information from latest apks to the application and update dates
|
||||||
UNSET_VERSION_CODE = -0x100000000
|
apply_info_from_latest_apk(apps, apks + archapks)
|
||||||
|
|
||||||
# Some information from the apks needs to be applied up to the application
|
|
||||||
# level. When doing this, we use the info from the most recent version's apk.
|
|
||||||
# We deal with figuring out when the app was added and last updated at the
|
|
||||||
# same time.
|
|
||||||
for appid, app in apps.items():
|
|
||||||
bestver = UNSET_VERSION_CODE
|
|
||||||
for apk in apks + archapks:
|
|
||||||
if apk['packageName'] == appid:
|
|
||||||
if apk['versionCode'] > bestver:
|
|
||||||
bestver = apk['versionCode']
|
|
||||||
bestapk = apk
|
|
||||||
|
|
||||||
if 'added' in apk:
|
|
||||||
if not app.added or apk['added'] < app.added:
|
|
||||||
app.added = apk['added']
|
|
||||||
if not app.lastUpdated or apk['added'] > app.lastUpdated:
|
|
||||||
app.lastUpdated = apk['added']
|
|
||||||
|
|
||||||
if not app.added:
|
|
||||||
logging.debug("Don't know when " + appid + " was added")
|
|
||||||
if not app.lastUpdated:
|
|
||||||
logging.debug("Don't know when " + appid + " was last updated")
|
|
||||||
|
|
||||||
if bestver == UNSET_VERSION_CODE:
|
|
||||||
|
|
||||||
if app.Name is None:
|
|
||||||
app.Name = app.AutoName or appid
|
|
||||||
app.icon = None
|
|
||||||
logging.debug("Application " + appid + " has no packages")
|
|
||||||
else:
|
|
||||||
if app.Name is None:
|
|
||||||
app.Name = bestapk['name']
|
|
||||||
app.icon = bestapk['icon'] if 'icon' in bestapk else None
|
|
||||||
if app.CurrentVersionCode is None:
|
|
||||||
app.CurrentVersionCode = str(bestver)
|
|
||||||
|
|
||||||
# Sort the app list by name, then the web site doesn't have to by default.
|
# Sort the app list by name, then the web site doesn't have to by default.
|
||||||
# (we had to wait until we'd scanned the apks to do this, because mostly the
|
# (we had to wait until we'd scanned the apks to do this, because mostly the
|
||||||
@ -1983,7 +2014,6 @@ def main():
|
|||||||
make_binary_transparency_log(repodirs)
|
make_binary_transparency_log(repodirs)
|
||||||
|
|
||||||
if config['update_stats']:
|
if config['update_stats']:
|
||||||
|
|
||||||
# Update known apks info...
|
# Update known apks info...
|
||||||
knownapks.writeifchanged()
|
knownapks.writeifchanged()
|
||||||
|
|
||||||
@ -2003,9 +2033,7 @@ def main():
|
|||||||
f.write(data)
|
f.write(data)
|
||||||
|
|
||||||
if cachechanged:
|
if cachechanged:
|
||||||
apkcache["METADATA_VERSION"] = METADATA_VERSION
|
write_cache(apkcache)
|
||||||
with open(apkcachefile, 'wb') as cf:
|
|
||||||
pickle.dump(apkcache, cf)
|
|
||||||
|
|
||||||
# Update the wiki...
|
# Update the wiki...
|
||||||
if options.wiki:
|
if options.wiki:
|
||||||
|
Loading…
Reference in New Issue
Block a user