summaryrefslogtreecommitdiffstats
path: root/source-builder/sb/macros.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2013-04-13 18:29:30 +1000
committerChris Johns <chrisj@rtems.org>2013-04-13 18:29:30 +1000
commit0565e1fa4b7a67ee13626fcdc65c5c3f35975247 (patch)
tree698924b74be7267e849a66d78ed0a3c103c4a7e8 /source-builder/sb/macros.py
parentFix options bug when the macro file is not found. (diff)
downloadrtems-source-builder-0565e1fa4b7a67ee13626fcdc65c5c3f35975247.tar.bz2
Add support for snapshot testing.
User macro files passed on the command line allow a user to override the defaults in configuration files to test new changes in pending releases. Fix macros issues with keys with more than one map.
Diffstat (limited to 'source-builder/sb/macros.py')
-rw-r--r--source-builder/sb/macros.py55
1 files changed, 39 insertions, 16 deletions
diff --git a/source-builder/sb/macros.py b/source-builder/sb/macros.py
index 7d218ef..3474bb6 100644
--- a/source-builder/sb/macros.py
+++ b/source-builder/sb/macros.py
@@ -118,11 +118,11 @@ class macros:
return text
def __iter__(self):
- return macros.macro_iterator(self.macros[self.read_map].keys())
+ return macros.macro_iterator(self.keys())
def __getitem__(self, key):
macro = self.get(key)
- if macro is None:
+ if macro is None or macro[1] == 'undefine':
raise IndexError('key: %s' % (key))
return macro[2]
@@ -143,7 +143,7 @@ class macros:
raise TypeError('bad value tuple value field: %s' % (type(value[2])))
if value[0] not in ['none', 'triplet', 'dir', 'file', 'exe']:
raise TypeError('bad value tuple (type field): %s' % (value[0]))
- if value[1] not in ['none', 'optional', 'required', 'override']:
+ if value[1] not in ['none', 'optional', 'required', 'override', 'undefine']:
raise TypeError('bad value tuple (attrib field): %s' % (value[1]))
self.macros[self.write_map][self.key_filter(key)] = value
@@ -157,18 +157,31 @@ class macros:
return len(self.keys())
def keys(self):
- k = self.macros[self.read_map].keys()
+
+ def _map_keys(_map):
+ u = []
+ k = []
+ for mk in _map:
+ if _map[mk][1] == 'undefine':
+ u += [mk]
+ else:
+ k += [mk]
+ return k, u
+
+ keys, undefined = _map_keys(self.macros[self.read_map])
if map is not 'global':
- k += self.macros['global'].keys()
- return sorted(set(k))
+ gk, u = _map_keys(self.macros['global'])
+ undefined = set(undefined + u)
+ for k in gk:
+ if k not in undefined:
+ keys += [k]
+ return sorted(set(keys))
def has_key(self, key):
if type(key) is not str:
raise TypeError('bad key type (want str): %s' % (type(key)))
- key = self.key_filter(key)
- if key not in self.macros[self.read_map].keys():
- if key not in self.macros['global'].keys():
- return False
+ if self.key_filter(key) not in self.keys():
+ return False
return True
def maps(self):
@@ -277,7 +290,11 @@ class macros:
macro = []
token = ''
state = 'key'
- return macros
+ for m in macros:
+ if m not in self.macros:
+ self.macros[m] = {}
+ for mm in macros[m]:
+ self.macros[m][mm] = macros[m][mm]
def load(self, name):
try:
@@ -287,11 +304,6 @@ class macros:
raise error.general('opening macro file: %s' % (path.host(name)))
macros = self.parse(mc)
mc.close()
- for m in macros:
- if m not in self.macros:
- self.macros[m] = {}
- for mm in macros[m]:
- self.macros[m][mm] = macros[m][mm]
self.files += [name]
def get(self, key):
@@ -376,4 +388,15 @@ if __name__ == "__main__":
if d.has_key('test1'):
print 'error: copy failed.'
sys.exit(1)
+ m.parse("[test]\n" \
+ "test1: none, undefine, ''\n" \
+ "name: none, override, 'pink'\n")
+ m.set_read_map('test')
+ if m['name'] != 'pink':
+ print 'error: override failed. name is %s' % (m['name'])
+ sys.exit(1)
+ if m.has_key('test1'):
+ print 'error: map undefine failed.'
+ sys.exit(1)
print m
+ print m.keys()