From 75ebb6e8ccca19ae936463b5574b452a0825ad9a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20P=C3=B6hn?= Date: Tue, 16 May 2017 15:04:37 +0200 Subject: [PATCH] fix building with yml metadata --- fdroidserver/build.py | 8 ++++---- fdroidserver/common.py | 30 ++++++++++++++++++++++++++++-- fdroidserver/metadata.py | 14 ++++++++++---- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 1cfc7ff5..cc73679d 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -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): diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 76888cce..b908dd6f 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -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)$") diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index f014d1f0..481f10c6 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -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 -- 2.30.2