chiark / gitweb /
check whether metadata file is a duplicate before parsing it
[fdroidserver.git] / fdroidserver / metadata.py
index 722e1710a29bed277360dc804fd96e70207b3eef..9ba9b1fdef17d8a1ecb0acb9c2a9c5dd418d80c6 100644 (file)
@@ -779,13 +779,14 @@ def read_metadata(xref=True):
     for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
                                + glob.glob(os.path.join('metadata', '*.json'))
                                + glob.glob(os.path.join('metadata', '*.xml'))
-                               + glob.glob(os.path.join('metadata', '*.yaml'))
+                               + glob.glob(os.path.join('metadata', '*.yml'))
                                + glob.glob('.fdroid.json')
                                + glob.glob('.fdroid.xml')
-                               + glob.glob('.fdroid.yaml')):
+                               + glob.glob('.fdroid.yml')):
+        packageName, _ = fdroidserver.common.get_extension(os.path.basename(metadatapath))
+        if packageName in apps:
+            raise MetaDataException("Found multiple metadata files for " + packageName)
         app = parse_metadata(metadatapath)
-        if app.id in apps:
-            raise MetaDataException("Found multiple metadata files for " + app.id)
         check_metadata(app)
         apps[app.id] = app
 
@@ -836,7 +837,7 @@ def get_default_app_info(metadatapath=None):
             for root, dirs, files in os.walk(os.getcwd()):
                 if 'build.gradle' in files:
                     p = os.path.join(root, 'build.gradle')
-                    with open(p) as f:
+                    with open(p, 'rb') as f:
                         data = f.read()
                     m = pattern.search(data)
                     if m:
@@ -950,7 +951,7 @@ def parse_metadata(metadatapath):
             parse_json_metadata(mf, app)
         elif ext == 'xml':
             parse_xml_metadata(mf, app)
-        elif ext == 'yaml':
+        elif ext == 'yml':
             parse_yaml_metadata(mf, app)
         else:
             raise MetaDataException('Unknown metadata format: %s' % metadatapath)
@@ -1384,9 +1385,9 @@ def write_metadata(metadatapath, app):
         raise MetaDataException('Cannot write "%s", not an accepted format, use: %s' % (
             metadatapath, ', '.join(accepted)))
 
-    with open(metadatapath, 'w') as mf:
+    with open(metadatapath, 'w', encoding='utf8') as mf:
         if ext == 'txt':
             return write_txt(mf, app)
-        elif ext == 'yaml':
+        elif ext == 'yml':
             return write_yaml(mf, app)
     raise MetaDataException('Unknown metadata format: %s' % metadatapath)