chiark / gitweb /
metadata: also read .fdroid.txt metadata
[fdroidserver.git] / fdroidserver / metadata.py
index d832fd0cc39d32ec28f6a505055367a0618ceb52..25e0537705411cd6c7fdb18f52e19344d0e46db3 100644 (file)
@@ -204,6 +204,7 @@ build_flags_order = [
     'commit',
     'subdir',
     'submodules',
+    'sudo',
     'init',
     'patch',
     'gradle',
@@ -246,6 +247,7 @@ class Build(dict):
         self.commit = None
         self.subdir = None
         self.submodules = False
+        self.sudo = ''
         self.init = ''
         self.patch = []
         self.gradle = []
@@ -333,6 +335,7 @@ flagtypes = {
     'gradle': TYPE_LIST,
     'antcommands': TYPE_LIST,
     'gradleprops': TYPE_LIST,
+    'sudo': TYPE_SCRIPT,
     'init': TYPE_SCRIPT,
     'prebuild': TYPE_SCRIPT,
     'build': TYPE_SCRIPT,
@@ -382,8 +385,8 @@ class FieldValidator():
 
 # Generic value types
 valuetypes = {
-    FieldValidator("Hexadecimal",
-                   r'^[0-9a-f]+$',
+    FieldValidator("Flattr ID",
+                   r'^[0-9a-z]+$',
                    ['FlattrID']),
 
     FieldValidator("HTTP link",
@@ -725,6 +728,7 @@ def read_metadata(xref=True, check_vcs=[]):
     for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
                                + glob.glob(os.path.join('metadata', '*.json'))
                                + glob.glob(os.path.join('metadata', '*.yml'))
+                               + glob.glob('.fdroid.txt')
                                + glob.glob('.fdroid.json')
                                + glob.glob('.fdroid.yml')):
         packageName, _ = fdroidserver.common.get_extension(os.path.basename(metadatapath))
@@ -986,7 +990,8 @@ def parse_json_metadata(mf, app):
 
 def parse_yaml_metadata(mf, app):
     yamldata = yaml.load(mf, Loader=YamlLoader)
-    app.update(yamldata)
+    if yamldata:
+        app.update(yamldata)
     return app
 
 
@@ -1051,9 +1056,11 @@ def write_yaml(mf, app):
                 # next iteration will need to insert a newline
                 insert_newline = True
             else:
-                if (hasattr(app, field) and getattr(app, field)) or field is 'Builds':
+                if app.get(field) or field is 'Builds':
+                    # .txt calls it 'builds' internally, everywhere else its 'Builds'
                     if field is 'Builds':
-                        cm.update({field: _builds_to_yaml(app)})
+                        if app.get('builds'):
+                            cm.update({field: _builds_to_yaml(app)})
                     elif field is 'CurrentVersionCode':
                         cm.update({field: _field_to_yaml(TYPE_INT, getattr(app, field))})
                     else: