chiark / gitweb /
fix building with yml metadata
authorMichael Pöhn <michael.poehn@fsfe.org>
Tue, 16 May 2017 13:04:37 +0000 (15:04 +0200)
committerMichael Pöhn <michael.poehn@fsfe.org>
Tue, 4 Jul 2017 09:51:08 +0000 (11:51 +0200)
fdroidserver/build.py
fdroidserver/common.py
fdroidserver/metadata.py

index 1cfc7ff5055db82c7634e14f78b45da58cfc15b0..cc73679d0c3ec9d2900b567c9650036f9e59a4cd 100644 (file)
@@ -136,8 +136,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
         ftp.mkdir('metadata')
         ftp.mkdir('srclibs')
         ftp.chdir('metadata')
-        ftp.put(os.path.join('metadata', app.id + '.txt'),
-                app.id + '.txt')
+        metadatapath = common.metadata_relpath(app.id)
+        ftp.put(metadatapath, os.path.basename(metadatapath))
         # And patches if there are any...
         if os.path.exists(os.path.join('metadata', app.id)):
             send_dir(os.path.join('metadata', app.id))
@@ -185,8 +185,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
             send_dir(lib)
             # Copy the metadata file too...
             ftp.chdir(homedir + '/srclibs')
-            ftp.put(os.path.join('srclibs', name + '.txt'),
-                    name + '.txt')
+            srclibpath = common.metadata_srclib_relpath(name)
+            ftp.put(srclibpath, os.path.basename(srclibpath))
         # Copy the main app source code
         # (no need if it's a srclib)
         if (not basesrclib) and os.path.exists(build_dir):
index 76888ccea404a91a93a1634c70e3ad539220d502..b908dd6f6bf97d7951b754ba1f21978313a48a3d 100644 (file)
@@ -397,8 +397,8 @@ def get_local_metadata_files():
 
 def read_pkg_args(args, allow_vercodes=False):
     """
-    Given the arguments in the form of multiple appid:[vc] strings, this returns
-    a dictionary with the set of vercodes specified for each package.
+    :param args: arguments in the form of multiple appid:[vc] strings
+    :returns: a dictionary with the set of vercodes specified for each package
     """
 
     vercodes = {}
@@ -474,6 +474,32 @@ def has_extension(filename, ext):
     return ext == f_ext
 
 
+def metadata_srclib_relpath(name):
+    '''
+    :param name: name of the src lib. (eg. 'HttpClient')
+    :returns: relative path for requested srclib (eg. 'srclib/HttpClient.txt')
+    '''
+    global config
+    for ext in config['accepted_formats']:
+        pth = os.path.join('srclibs', name + '.' + ext)
+        if os.path.isfile(pth):
+            return pth
+    raise FDroidException("could not find srclib metadata file for '{}'".format(name))
+
+
+def metadata_relpath(appid):
+    '''
+    :param appid: an appid. (eg. 'org.fdroid.fdroid')
+    :returns: relative path for requested srclib (eg. 'metadata/org.fdroid.fdroid.txt')
+    '''
+    global config
+    for ext in config['accepted_formats']:
+        pth = os.path.join('metadata', appid + '.' + ext)
+        if os.path.isfile(pth):
+            return pth
+    raise FDroidException("could not find metadata file for '{}'".format(appid))
+
+
 publish_name_regex = re.compile(r"^(.+)_([0-9]+)\.(apk|zip)$")
 
 
index f014d1f049cce0ad3ad6ff22b13cd61dfa510949..481f10c66f5823ff2eaee0f29760ba87bb104470 100644 (file)
@@ -812,6 +812,12 @@ def post_metadata_parse(app):
         if type(v) in (float, int):
             app[k] = str(v)
 
+    if 'Builds' in app:
+        app['builds'] = app.pop('Builds')
+
+    if 'flavours' in app and app['flavours'] == [True]:
+        app['flavours'] = ['yes']
+
     if isinstance(app.Categories, str):
         app.Categories = [app.Categories]
     elif app.Categories is None:
@@ -833,7 +839,8 @@ def post_metadata_parse(app):
                             build[k] = ['yes']
                         else:
                             build[k] = []
-                elif flagtype(k) == TYPE_STRING and type(v) in (float, int):
+                elif (flagtype(k) == TYPE_STRING or flagtype(k) == TYPE_INT) \
+                     and type(v) in (float, int):
                     build[k] = str(v)
             builds.append(build)
 
@@ -950,9 +957,8 @@ def parse_json_metadata(mf, app):
 
 
 def parse_yaml_metadata(mf, app):
-
-    yamlinfo = yaml.load(mf, Loader=YamlLoader)
-    app.update(yamlinfo)
+    yamldata = yaml.load(mf, Loader=YamlLoader)
+    app.update(yamldata)
     return app