From: Ciaran Gultnieks Date: Tue, 20 May 2014 21:44:47 +0000 (+0100) Subject: Centralise management of srclib metadata X-Git-Tag: 0.2~69 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=3a73654d49712557c90e173fb8cb59e7e3abc29c;p=fdroidserver.git Centralise management of srclib metadata --- diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 35ecaadb..45eac1ec 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -983,8 +983,9 @@ def main(): srclib_dir = os.path.join(build_dir, 'srclib') extlib_dir = os.path.join(build_dir, 'extlib') - # Get all apps... + # Read all app and srclib metadata allapps = metadata.read_metadata(xref=not options.onserver) + metadata.read_srclibs() apps = common.read_app_args(args, allapps, True) apps = [app for app in apps if (options.force or not app['Disabled']) and diff --git a/fdroidserver/common.py b/fdroidserver/common.py index c278beed..b7ee5081 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -280,10 +280,9 @@ def getvcs(vcstype, remote, local): def getsrclibvcs(name): - srclib_path = os.path.join('srclibs', name + ".txt") - if not os.path.exists(srclib_path): + if not name in metadata.srclibs: raise VCSException("Missing srclib " + name) - return metadata.parse_srclib(srclib_path)['Repo Type'] + return metadata.srclibs[name]['Repo Type'] class vcs: @@ -940,12 +939,10 @@ def getsrclib(spec, srclib_dir, srclibpaths=[], subdir=None, if '/' in name: name, subdir = name.split('/', 1) - srclib_path = os.path.join('srclibs', name + ".txt") - - if not os.path.exists(srclib_path): + if not name in metadata.srclibs: raise BuildException('srclib ' + name + ' not found.') - srclib = metadata.parse_srclib(srclib_path) + srclib = metadata.srclibs[name] sdir = os.path.join(srclib_dir, name) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 5b075385..6d4982ab 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -23,7 +23,7 @@ import glob import cgi import logging -srclibs = [] +srclibs = {} class MetaDataException(Exception): def __init__(self, value): @@ -421,6 +421,28 @@ def parse_srclib(metafile): return thisinfo +def read_srclibs(): + """Read all srclib metadata. + + The information read will be accessible as metadata.srclibs, which is a + dictionary, keyed on srclib name, with the values each being a dictionary + in the same format as that returned by the parse_srclib function. + + A MetaDataException is raised if there are any problems with the srclib + metadata. + """ + global srclibs + srclibs = {} + + srcdir = 'srclibs' + if not os.path.exists(srcdir): + os.makedirs(srcdir) + + for metafile in sorted(glob.glob(os.path.join(srcdir, '*.txt'))): + srclibname = os.path.basename(metafile[:-4]) + srclibs[srclibname] = parse_srclib(metafile) + + # Read all metadata. Returns a list of 'app' objects (which are dictionaries as # returned by the parse_metadata function. def read_metadata(xref=True): diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 5f7d36d7..6d0ea7ca 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -47,9 +47,10 @@ def main(): config = common.read_config(options) - # Get all apps... + # Read all app and srclib metadata allapps = metadata.read_metadata() apps = common.read_app_args(args, allapps, True) + metadata.read_srclibs() problems = []