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
This commit is contained in:
Daniel Martí 2014-02-14 18:33:00 +01:00
parent 0da4667bad
commit 7f2c0e27ca

View file

@ -64,7 +64,7 @@ app_defaults = {
# manual, they're roughly in order of application. # manual, they're roughly in order of application.
ordered_flags = [ ordered_flags = [
'disable', 'commit', 'subdir', 'submodules', 'init', 'disable', 'commit', 'subdir', 'submodules', 'init',
'gradle', 'maven', 'output', 'oldsdkloc', 'target', 'gradle', 'maven', 'kivy', 'output', 'oldsdkloc', 'target',
'update', 'encoding', 'forceversion', 'forcevercode', 'rm', 'update', 'encoding', 'forceversion', 'forcevercode', 'rm',
'extlibs', 'srclibs', 'patch', 'prebuild', 'scanignore', 'extlibs', 'srclibs', 'patch', 'prebuild', 'scanignore',
'scandelete', 'build', 'buildjni', 'preassemble', 'bindir', 'scandelete', 'build', 'buildjni', 'preassemble', 'bindir',
@ -484,6 +484,34 @@ def flagtype(name):
# #
def parse_metadata(metafile): 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): def parse_buildline(lines):
value = "".join(lines) value = "".join(lines)
parts = [p.replace("\\,", ",") parts = [p.replace("\\,", ",")
@ -508,22 +536,7 @@ def parse_metadata(metafile):
else: else:
thisbuild['commit'] = parts[2] thisbuild['commit'] = parts[2]
for p in parts[3:]: for p in parts[3:]:
pk, pv = p.split('=', 1) add_buildflag(p, thisbuild)
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))
return thisbuild return thisbuild
@ -583,15 +596,7 @@ def parse_metadata(metafile):
else: else:
buildlines.append(line.lstrip()) buildlines.append(line.lstrip())
bl = ''.join(buildlines) bl = ''.join(buildlines)
bv = bl.split('=', 1) add_buildflag(bl, curbuild)
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()
buildlines = [] buildlines = []
if mode == 0: if mode == 0: