chiark / gitweb /
Centralise management of srclib metadata
authorCiaran Gultnieks <ciaran@ciarang.com>
Tue, 20 May 2014 21:44:47 +0000 (22:44 +0100)
committerCiaran Gultnieks <ciaran@ciarang.com>
Tue, 20 May 2014 21:44:47 +0000 (22:44 +0100)
fdroidserver/build.py
fdroidserver/common.py
fdroidserver/metadata.py
fdroidserver/scanner.py

index 35ecaadbd30a44a1d865741ccf6ffefd4361fb8f..45eac1ec46c0e1b2ba511b28d07980bcbd862c2c 100644 (file)
@@ -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
index c278beed203f4cb02dc78156ff67d01e8148caf8..b7ee50818b38e0e7e73cad3d94ab3553cea77096 100644 (file)
@@ -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)
 
index 5b0753859c1bcb7714c9af23e4ee16af55ccb17b..6d4982abc1e1a5a9ec3421e9769d26f071f31ae4 100644 (file)
@@ -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):
index 5f7d36d71511aa7a908339e949782924da7c805d..6d0ea7cafc7d622a3f8a0a13cd36046ff1022c35 100644 (file)
@@ -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 = []