implement override
This commit is contained in:
parent
950ff76bd5
commit
4e8a1dbac6
73
update.py
73
update.py
@ -37,7 +37,7 @@ def replace(s, d):
|
|||||||
from re import findall
|
from re import findall
|
||||||
if isinstance(s, str):
|
if isinstance(s, str):
|
||||||
for var in findall(r"%\(([A-Za-z0-9_]*)\)", s):
|
for var in findall(r"%\(([A-Za-z0-9_]*)\)", s):
|
||||||
s = s.replace("%({})".format(var), d[var])
|
s = s.replace("%({})".format(var), str(d[var]))
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ def fetch_url(src, dst):
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def parse_yaml(stream):
|
def parse_yaml(stream, override={}):
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -110,6 +110,10 @@ def parse_yaml(stream):
|
|||||||
print(exc)
|
print(exc)
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
||||||
|
for k in config:
|
||||||
|
if k in override:
|
||||||
|
config[k] = override[k]
|
||||||
|
|
||||||
config = interpolate(config, config)
|
config = interpolate(config, config)
|
||||||
return config
|
return config
|
||||||
|
|
||||||
@ -538,7 +542,7 @@ def make_executable(path):
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def parse_cmake_module(s_in):
|
def parse_cmake_module(s_in, override={}):
|
||||||
from collections import Mapping, Iterable
|
from collections import Mapping, Iterable
|
||||||
|
|
||||||
parsed_config = collections.defaultdict(lambda: None)
|
parsed_config = collections.defaultdict(lambda: None)
|
||||||
@ -564,14 +568,13 @@ def parse_cmake_module(s_in):
|
|||||||
autocmake_entry = autocmake_entry.replace('\n ', '\n')
|
autocmake_entry = autocmake_entry.replace('\n ', '\n')
|
||||||
|
|
||||||
buf = StringIO(autocmake_entry)
|
buf = StringIO(autocmake_entry)
|
||||||
config = parse_yaml(buf)
|
config = parse_yaml(buf, override)
|
||||||
|
|
||||||
for s in ['docopt', 'define', 'export', 'fetch', 'warning']:
|
for k, v in config.items():
|
||||||
if s in config:
|
if isinstance(v, Iterable) and not isinstance(v, str):
|
||||||
if isinstance(config[s], Iterable) and not isinstance(config[s], str):
|
parsed_config[k] = [x for x in config[k]]
|
||||||
parsed_config[s] = [x for x in config[s]]
|
else:
|
||||||
else:
|
parsed_config[k] = [config[k]]
|
||||||
parsed_config[s] = [config[s]]
|
|
||||||
|
|
||||||
return parsed_config
|
return parsed_config
|
||||||
|
|
||||||
@ -601,6 +604,9 @@ endif()'''
|
|||||||
parsed_config = parse_cmake_module(s)
|
parsed_config = parse_cmake_module(s)
|
||||||
assert parsed_config['docopt'] == ["--cxx=<CXX> C++ compiler [default: g++].", "--extra-cxx-flags=<EXTRA_CXXFLAGS> Extra C++ compiler flags [default: '']."]
|
assert parsed_config['docopt'] == ["--cxx=<CXX> C++ compiler [default: g++].", "--extra-cxx-flags=<EXTRA_CXXFLAGS> Extra C++ compiler flags [default: '']."]
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_cmake_module_no_key():
|
||||||
|
|
||||||
s = '''#.rst:
|
s = '''#.rst:
|
||||||
#
|
#
|
||||||
# Foo ...
|
# Foo ...
|
||||||
@ -616,6 +622,53 @@ endif()'''
|
|||||||
parsed_config = parse_cmake_module(s)
|
parsed_config = parse_cmake_module(s)
|
||||||
assert parsed_config['docopt'] is None
|
assert parsed_config['docopt'] is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_cmake_module_interpolate():
|
||||||
|
|
||||||
|
s = r'''#.rst:
|
||||||
|
#
|
||||||
|
# Foo ...
|
||||||
|
#
|
||||||
|
# autocmake.yml configuration::
|
||||||
|
#
|
||||||
|
# major: 1
|
||||||
|
# minor: 2
|
||||||
|
# patch: 3
|
||||||
|
# a: v%(major)
|
||||||
|
# b: v%(minor)
|
||||||
|
# c: v%(patch)
|
||||||
|
|
||||||
|
enable_language(CXX)'''
|
||||||
|
|
||||||
|
parsed_config = parse_cmake_module(s)
|
||||||
|
assert parsed_config['a'] == ['v1']
|
||||||
|
assert parsed_config['b'] == ['v2']
|
||||||
|
assert parsed_config['c'] == ['v3']
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_cmake_module_override():
|
||||||
|
|
||||||
|
s = r'''#.rst:
|
||||||
|
#
|
||||||
|
# Foo ...
|
||||||
|
#
|
||||||
|
# autocmake.yml configuration::
|
||||||
|
#
|
||||||
|
# major: 1
|
||||||
|
# minor: 2
|
||||||
|
# patch: 3
|
||||||
|
# a: v%(major)
|
||||||
|
# b: v%(minor)
|
||||||
|
# c: v%(patch)
|
||||||
|
|
||||||
|
enable_language(CXX)'''
|
||||||
|
|
||||||
|
d = {'minor': 4}
|
||||||
|
parsed_config = parse_cmake_module(s, d)
|
||||||
|
assert parsed_config['a'] == ['v1']
|
||||||
|
assert parsed_config['b'] == ['v4']
|
||||||
|
assert parsed_config['c'] == ['v3']
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user