[kernel] r5918 - people/waldi/linux-2.6/debian/lib/python/debian_linux

Bastian Blank waldi at costa.debian.org
Fri Feb 17 17:22:48 UTC 2006


Author: waldi
Date: Fri Feb 17 17:22:48 2006
New Revision: 5918

Modified:
   people/waldi/linux-2.6/debian/lib/python/debian_linux/config.py
Log:
debian/lib/python/debian_linux/config.py
- Build tree of available images.
- Support nested subarches/variants.


Modified: people/waldi/linux-2.6/debian/lib/python/debian_linux/config.py
==============================================================================
--- people/waldi/linux-2.6/debian/lib/python/debian_linux/config.py	(original)
+++ people/waldi/linux-2.6/debian/lib/python/debian_linux/config.py	Fri Feb 17 17:22:48 2006
@@ -36,6 +36,7 @@
 
     def __init__(self, underlay = None):
         self._underlay = underlay
+        self.tree = {}
         self._read_base()
 
     def __getitem__(self, key):
@@ -48,19 +49,17 @@
         ret.append(os.path.join('debian/arch', name))
         return ret
 
-    def _read_arch(self, arch):
+    def _read_arch(self, tree_item, arch):
         files = self._get_files("%s/%s" % (arch, self.config_name))
         config = config_parser(self.schema, files)
 
-        subarches = config['base',].get('subarches', [])
         flavours = config['base',].get('flavours', [])
+        subarches = config['base',].get('subarches', [])
 
         for section in iter(config):
             real = list(section)
-            if real[-1] in subarches:
+            if real[-1] in subarches + flavours:
                 real[0:0] = ['base', arch]
-            elif real[-1] in flavours:
-                real[0:0] = ['base', arch, 'none']
             else:
                 real[0:] = [real.pop(), arch]
             real = tuple(real)
@@ -68,23 +67,8 @@
             s.update(config[section])
             self[tuple(real)] = s
 
-        for subarch in subarches:
-            if self.has_key(('base', arch, subarch)):
-                avail = self['base', arch, subarch].get('available', True)
-            else:
-                avail = True
-            if avail:
-                self._read_subarch(arch, subarch)
-
-        if flavours:
-            base = self['base', arch]
-            subarches.insert(0, 'none')
-            base['subarches'] = subarches
-            del base['flavours']
-            self['base', arch] = base
-            self['base', arch, 'none'] = {'flavours': flavours}
-            for flavour in flavours:
-                self._read_flavour(arch, 'none', flavour)
+        self._read_flavours(flavours, tree_item, arch, ())
+        self._read_variants(subarches, tree_item, arch, ())
 
     def _read_base(self):
         files = self._get_files(self.config_name)
@@ -105,34 +89,64 @@
                 avail = self['base', arch].get('available', True)
             except KeyError:
                 avail = True
+            self.tree[arch] = item = {'available': avail, 'key': (arch,), 'recurse': {}, 'type': 'arch'}
             if avail:
-                self._read_arch(arch)
+                self._read_arch(item['recurse'], arch)
 
-    def _read_flavour(self, arch, subarch, flavour):
-        if not self.has_key(('base', arch, subarch, flavour)):
+        import pprint
+        pprint.pprint(self.tree)
+        pprint.pprint(self)
+        raise SystemExit
+
+    def _read_flavour(self, arch, variants, flavour):
+        key = ('base', arch) + variants + (flavour,)
+        if not self.has_key(key):
             import warnings
-            warnings.warn('No config entry for flavour %s, subarch %s, arch %s' % (flavour, subarch, arch), DeprecationWarning)
-            self['base', arch, subarch, flavour] = {}
+            warnings.warn('No config entry for flavour %s, variant %s, arch %s' % (flavour, '-'.join(variants), arch), DeprecationWarning)
+            self[key] = {}
 
-    def _read_subarch(self, arch, subarch):
-        files = self._get_files("%s/%s/%s" % (arch, subarch, self.config_name))
+    def _read_flavours(self, check, tree_item, arch, variants):
+        for flavour in check:
+            key = ('base', arch,) + variants + (flavour,)
+            if self.has_key(key):
+                avail = self[key].get('available', True)
+            else:
+                avail = True
+            tree_item[flavour] = item = {'available': avail, 'key': key[1:], 'type': 'flavour'}
+            if avail:
+                self._read_flavour(arch, variants, flavour)
+
+    def _read_variant(self, tree_item, arch, variants):
+        files = self._get_files("/".join((arch,) + variants + (self.config_name,)))
         config = config_parser(self.schema, files)
 
         flavours = config['base',].get('flavours', [])
+        subarches = config['base',].get('subarches', [])
 
         for section in iter(config):
             real = list(section)
-            if real[-1] in flavours:
-                real[0:0] = ['base', arch, subarch]
+            if real[-1] in flavours + subarches:
+                real[0:0] = ['base', arch] + variants
             else:
-                real[0:] = [real.pop(), arch, subarch]
+                real[0:] = (real.pop(), arch,) + variants
             real = tuple(real)
             s = self.get(real, {})
             s.update(config[section])
             self[tuple(real)] = s
 
-        for flavour in flavours:
-            self._read_flavour(arch, subarch, flavour)
+        self._read_flavours(flavours, tree_item, arch, variants)
+        self._read_variants(subarches, tree_item, arch, variants)
+
+    def _read_variants(self, check, tree_item, arch, variants):
+        for variant in check:
+            key = ('base', arch) + variants + (variant,)
+            if self.has_key(key):
+                avail = self[key].get('available', True)
+            else:
+                avail = True
+            tree_item[variant] = item = {'available': avail, 'key': key[1:], 'recurse': {}, 'type': 'variant'}
+            if avail:
+                self._read_variant(item['recurse'], arch, variants + (variant,))
 
     def _update(self, ret, inputkey):
         for key, value in super(config_reader, self).get(tuple(inputkey), {}).iteritems():



More information about the Kernel-svn-changes mailing list