From: Daniel Martí Date: Fri, 14 Feb 2014 17:33:00 +0000 (+0100) Subject: Unify Build and Buildv2 parsing into one X-Git-Tag: 0.2~284 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7f2c0e27ca5e4f54f947f3a7511e575f1b62bfdb;p=fdroidserver.git Unify Build and Buildv2 parsing into one Fixes: * Buildv2 errors * Buildv2 now checks with ordered_flags like Build * Build now has more descriptive exceptions like Buildv2 --- diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 88548d57..857622e0 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -64,7 +64,7 @@ app_defaults = { # manual, they're roughly in order of application. ordered_flags = [ 'disable', 'commit', 'subdir', 'submodules', 'init', - 'gradle', 'maven', 'output', 'oldsdkloc', 'target', + 'gradle', 'maven', 'kivy', 'output', 'oldsdkloc', 'target', 'update', 'encoding', 'forceversion', 'forcevercode', 'rm', 'extlibs', 'srclibs', 'patch', 'prebuild', 'scanignore', 'scandelete', 'build', 'buildjni', 'preassemble', 'bindir', @@ -484,6 +484,34 @@ def flagtype(name): # def parse_metadata(metafile): + linedesc = None + + def add_buildflag(p, thisbuild): + bv = p.split('=', 1) + if len(bv) != 2: + raise MetaDataException("Invalid build flag at {0} in {1}". + format(buildlines[0], linedesc)) + pk, pv = bv + if pk in thisbuild: + raise MetaDataException("Duplicate definition on {0} in version {1} of {2}". + format(pk, thisbuild['version'], linedesc)) + + pk = pk.lstrip() + if pk not in ordered_flags: + raise MetaDataException("Unrecognised build flag at {0} in {1}". + format(p, linedesc)) + t = flagtype(pk) + if t == 'list': + # Port legacy ';' separators + thisbuild[pk] = pv.replace(';',',').split(',') + elif t == 'string': + thisbuild[pk] = pv + elif t == 'script': + thisbuild[pk] = pv + else: + raise MetaDataException("Unrecognised build flag type '%s' at %s in %s" % ( + t, p, linedesc)) + def parse_buildline(lines): value = "".join(lines) parts = [p.replace("\\,", ",") @@ -508,22 +536,7 @@ def parse_metadata(metafile): else: thisbuild['commit'] = parts[2] for p in parts[3:]: - pk, pv = p.split('=', 1) - pk = pk.strip() - if pk not in ordered_flags: - raise MetaDataException("Unrecognised build flag at {0} in {1}". - format(p, metafile.name)) - t = flagtype(pk) - if t == 'list': - # Port legacy ';' separators - thisbuild[pk] = pv.replace(';',',').split(',') - elif t == 'string': - thisbuild[pk] = pv - elif t == 'script': - thisbuild[pk] = pv - else: - raise MetaDataException("Unrecognised build flag type '%s' at %s in %s" % ( - t, p, metafile.name)) + add_buildflag(p, thisbuild) return thisbuild @@ -583,15 +596,7 @@ def parse_metadata(metafile): else: buildlines.append(line.lstrip()) bl = ''.join(buildlines) - bv = bl.split('=', 1) - if len(bv) != 2: - raise MetaDataException("Invalid build flag at {0} in {1}". - format(buildlines[0], linedesc)) - name, val = bv - if name in curbuild: - raise MetaDataException("Duplicate definition on {0} in version {1} of {2}". - format(name, curbuild['version'], linedesc)) - curbuild[name] = val.lstrip() + add_buildflag(bl, curbuild) buildlines = [] if mode == 0: