From: Hans-Christoph Steiner Date: Wed, 5 Aug 2015 08:55:54 +0000 (+0200) Subject: support .fdroid.* metadata file in source root of app being built X-Git-Tag: 0.7.0~75^2~7 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9abb80b3b77622c7ad0a4d26ef33417804406c2d;p=fdroidserver.git support .fdroid.* metadata file in source root of app being built This allows app makers to include a .fdroid.(json|xml|yaml|txt) metadata file in the root of the git repo of their app, then they can build it using `fdroid build`. This is useful for developers who want to maintain the fdroid build recipe themselves, and run the fdroid build process for their own builds. --- diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index d69e9074..bbaccd91 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -22,6 +22,7 @@ import os import re import glob import cgi +import logging import textwrap import io @@ -778,7 +779,10 @@ 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', '*.yaml')) + + glob.glob('.fdroid.json') + + glob.glob('.fdroid.xml') + + glob.glob('.fdroid.yaml')): app = parse_metadata(metadatapath) if app.id in apps: raise MetaDataException("Found multiple metadata files for " + app.id) @@ -824,6 +828,25 @@ def get_default_app_info(metadatapath=None): else: appid, _ = fdroidserver.common.get_extension(os.path.basename(metadatapath)) + if appid == '.fdroid': # we have local metadata in the app's source + if os.path.exists('AndroidManifest.xml'): + manifestroot = fdroidserver.common.parse_xml('AndroidManifest.xml') + else: + pattern = re.compile(""".*manifest\.srcFile\s+'AndroidManifest\.xml'.*""") + 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: + data = f.read() + m = pattern.search(data) + if m: + logging.debug('Using: ' + os.path.join(root, 'AndroidManifest.xml')) + manifestroot = fdroidserver.common.parse_xml(os.path.join(root, 'AndroidManifest.xml')) + break + if manifestroot is None: + raise MetaDataException("Cannot find a packageName for {0}!".format(metadatapath)) + appid = manifestroot.attrib['package'] + app = App() app.metadatapath = metadatapath if appid is not None: