[kernel] r4965 - in people/waldi/linux-2.6/debian: bin
lib/python/debian_linux
Bastian Blank
waldi at costa.debian.org
Sun Dec 4 11:36:20 UTC 2005
Author: waldi
Date: Sun Dec 4 11:36:20 2005
New Revision: 4965
Modified:
people/waldi/linux-2.6/debian/bin/gencontrol.py
people/waldi/linux-2.6/debian/lib/python/debian_linux/config.py
people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py
Log:
Rewrite config reader to support more than one section per (arch, subarch, flavour).
* debian/bin/gencontrol.py, debian/lib/python/debian_linux/gencontrol.py:
Explicitely Use base entries.
* debian/lib/python/debian_linux/config.py
- Rewrite.
- Loose support for entry merging for now.
Modified: people/waldi/linux-2.6/debian/bin/gencontrol.py
==============================================================================
--- people/waldi/linux-2.6/debian/bin/gencontrol.py (original)
+++ people/waldi/linux-2.6/debian/bin/gencontrol.py Sun Dec 4 11:36:20 2005
@@ -33,17 +33,17 @@
makefile.append(("setup-%s-real:" % arch, cmds_setup))
def do_arch_packages_post(self, packages, makefile, arch, vars, makeflags, extra):
- config_entry = self.config[arch,]
+ config_entry = self.config['base', arch]
makeflags_string = ' '.join(["%s='%s'" % i for i in makeflags.iteritems()])
# Append this here so it only occurs on the install-headers-all line
- makeflags_string += " FLAVOURS='%s' " % ' '.join(['%s' % i for i in config_entry['flavours']])
+# makeflags_string += " FLAVOURS='%s' " % ' '.join(['%s' % i for i in config_entry['flavours']])
cmds_binary_arch = []
cmds_binary_arch.append(("$(MAKE) -f debian/rules.real install-headers-all GENCONTROL_ARGS='\"-Vkernel:Depends=%s\"' %s" % (', '.join(extra['headers_arch_depends']), makeflags_string),))
makefile.append(("binary-arch-%s-real:" % arch, cmds_binary_arch))
def do_subarch_makeflags(self, makeflags, arch, subarch):
- config_entry = self.config[arch, subarch]
+ config_entry = self.config['base', arch, subarch]
for i in ('kernel-header-dirs', 'KERNEL_HEADER_DIRS'),:
if config_entry.has_key(i[0]):
makeflags[i[1]] = config_entry[i[0]]
@@ -71,7 +71,7 @@
makefile.append(("setup-%s-%s-real:" % (arch, subarch), cmds_setup))
def do_flavour_makeflags(self, makeflags, arch, subarch, flavour):
- config_entry = self.config[arch, subarch, flavour]
+ config_entry = self.config['base', arch, subarch, flavour]
makeflags['TYPE'] = 'kernel-package'
for i in (
('compiler', 'COMPILER'),
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 Sun Dec 4 11:36:20 2005
@@ -1,5 +1,9 @@
import os, os.path, re, sys, textwrap, ConfigParser
+__all__ = 'config_reader',
+
+_marker = object()
+
class config_reader(dict):
"""
Read configs in debian/arch and in the overlay directory.
@@ -35,115 +39,157 @@
self._read_base()
def __getitem__(self, key):
- if isinstance(key, basestring):
- return super(config_reader, self).__getitem__(key)
- if isinstance(key, tuple):
- ret = {}
- self.update(ret, 'base')
- if len(key) >= 1:
- # XXX: workaround
- del ret['abiname']
- del ret['arches']
- self.update(ret, key[0])
- if len(key) >= 2:
- del ret['subarches']
- self.update(ret, '-'.join(key[0:2]))
- if len(key) >= 3:
- del ret['flavours']
- self.update(ret, '-'.join(key[0:3]))
- return ret
- raise NotImplemented
+ return self.get(key)
def _get_files(self, name):
ret = []
if self._overlay_dir is not None:
ret.append(os.path.join(self._overlay_dir, name))
- ret.append(name)
+ ret.append(os.path.join('debian/arch', name))
return ret
- def _read_arch(self, arch, base):
- files = self._get_files("debian/arch/%s/%s" % (arch, self.config_name))
- c = config_parser(self.schema)
- c.read(files)
- t = c.items_convert('base')
- base.update(t)
- self[arch] = t
- subarches = t.get('subarches', [])
+ def _read_arch(self, 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', [])
+
+ for section in iter(config):
+ real = list(section)
+ if real[-1] in subarches:
+ 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)
+ s = self.get(real, {})
+ s.update(config[section])
+ self[tuple(real)] = s
+
for subarch in subarches:
try:
- t2 = c.items_convert(subarch)
- avail = t2.get('available', True)
+ avail = self['base', arch, subarch].get('available', True)
except ConfigParser.NoSectionError:
- t2 = {}
avail = True
if avail:
- self._read_subarch(arch, subarch, t2)
- else:
- self['-'.join((arch, subarch))] = t2
- flavours = t.get('flavours', None)
+ self._read_subarch(arch, subarch)
+
if flavours:
- for flavour in flavours:
- self._read_flavour(arch, 'none', flavour, c)
- self['-'.join((arch, 'none'))] = {}
+ base = self['base', arch]
subarches.insert(0, 'none')
- t['subarches'] = subarches
+ 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)
def _read_base(self):
- files = self._get_files("debian/arch/%s" % self.config_name)
- c = config_parser(self.schema)
- c.read(files)
- t1 = c.items_convert('base')
- self['base'] = t1
- for arch in t1['arches']:
+ files = self._get_files(self.config_name)
+ config = config_parser(self.schema, files)
+
+ arches = config['base',]['arches']
+
+ for section in iter(config):
+ real = list(section)
+ if real[-1] in arches:
+ real.insert(0, 'base')
+ else:
+ real.insert(0, real.pop())
+ self[tuple(real)] = config[section]
+
+ for arch in arches:
try:
- t2 = c.items_convert(arch)
- avail = t2.get('available', True)
- except ConfigParser.NoSectionError:
- t2 = {}
+ avail = self['base', arch].get('available', True)
+ except KeyError:
avail = True
if avail:
- self._read_arch(arch, t2)
- else:
- self[arch] = t2
+ self._read_arch(arch)
- def _read_flavour(self, arch, subarch, flavour, c):
- try:
- t = c.items_convert(flavour)
- except ConfigParser.NoSectionError:
- try:
- t = c.items_convert("%s-none-%s" % (arch, flavour))
- except ConfigParser.NoSectionError:
- #raise RuntimeError("Don't find config for %s-none-%s!" % (arch, flavour))
- t = {}
- self["%s-%s-%s" % (arch, subarch, flavour)] = t
+ def _read_flavour(self, arch, subarch, flavour):
+ if not self.has_key(('base', arch, subarch, flavour)):
+ import warnings
+ warnings.warn('No config entry for flavour %s, subarch %s, arch %s' % (flavour, subarch, arch), DeprecationWarning)
+ self['base', arch, subarch, flavour] = {}
def _read_subarch(self, arch, subarch, base):
- files = self._get_files("debian/arch/%s/%s/%s" % (arch, subarch, self.config_name))
- c = config_parser(self.schema)
- c.read(files)
- t = c.items_convert('base')
- base.update(t)
- self['-'.join((arch, subarch))] = t
- flavours = t.get('flavours', None)
- for flavour in flavours:
- self._read_flavour(arch, subarch, flavour, c)
+ raise NotImplemented
- def update(self, ret, inputkey):
- for key, value in super(config_reader, self).__getitem__(inputkey).iteritems():
+ def _update(self, ret, inputkey):
+ for key, value in super(config_reader, self).get(tuple(inputkey), {}).iteritems():
ret[key] = value
-class config_parser(object, ConfigParser.ConfigParser):
- def __init__(self, schema):
- ConfigParser.ConfigParser.__init__(self)
+ def get(self, key, default = _marker):
+ if isinstance(key, basestring):
+ key = key,
+
+ ret = super(config_reader, self).get(tuple(key), default)
+ if ret == _marker:
+ raise KeyError, key
+ return ret
+
+ def sections(self):
+ return super(config_reader, self).keys()
+
+class config_parser(object):
+ __slots__ = 'configs', 'schema'
+
+ def __init__(self, schema, files):
+ self.configs = []
self.schema = schema
+ for file in files:
+ config = ConfigParser.ConfigParser()
+ config.read(file)
+ self.configs.append(config)
+
+ def __getitem__(self, key):
+ return self.items(key)
+
+ def __iter__(self):
+ return iter(self.sections())
- def items_convert(self, section):
- items = self.items(section)
+ def items(self, section, var = {}):
ret = {}
- for key, value in items:
+ section = '_'.join(section)
+ exception = None
+ for config in self.configs:
try:
- value = self.schema[key](value)
- except KeyError: pass
- ret[key] = value
+ items = config.items(section)
+ except ConfigParser.NoSectionError, e:
+ exception = e
+ else:
+ for key, value in items:
+ try:
+ value = self.schema[key](value)
+ except KeyError: pass
+ ret[key] = value
+ exception = None
+ if exception is not None:
+ raise exception
return ret
+ def sections(self):
+ sections = []
+ for config in self.configs:
+ for section in config.sections():
+ section = tuple(section.split('_'))
+ if section not in sections:
+ sections.append(section)
+ return sections
+
+if __name__ == '__main__':
+ import sys
+ config = config_reader()
+ sections = config.sections()
+ sections.sort()
+ for section in sections:
+ print "[%s]" % (section,)
+ items = config[section]
+ items_keys = items.keys()
+ items_keys.sort()
+ for item in items:
+ print "%s: %s" % (item, items[item])
+ print
+
Modified: people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py
==============================================================================
--- people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py (original)
+++ people/waldi/linux-2.6/debian/lib/python/debian_linux/gencontrol.py Sun Dec 4 11:36:20 2005
@@ -46,7 +46,7 @@
self.do_main_packages(packages)
self.do_main_makefile(makefile, makeflags)
- for arch in iter(self.config['base']['arches']):
+ for arch in iter(self.config['base',]['arches']):
self.do_arch(packages, makefile, arch, self.changelog_vars.copy(), makeflags.copy())
def do_main_makefile(self, makefile, makeflags):
@@ -86,7 +86,7 @@
makefile.append(("binary-arch-%s-extra:" % arch, cmds))
def do_arch(self, packages, makefile, arch, vars, makeflags):
- config_entry = self.config[arch,]
+ config_entry = self.config['base', arch]
vars.update(config_entry)
if not config_entry.get('available', True):
@@ -123,7 +123,7 @@
vars['subarch'] = ''
else:
vars['subarch'] = '%s-' % subarch
- config_entry = self.config[arch, subarch]
+ config_entry = self.config['base', arch, subarch]
vars.update(config_entry)
makeflags['SUBARCH'] = subarch
@@ -146,7 +146,7 @@
pass
def do_flavour(self, packages, makefile, arch, subarch, flavour, vars, makeflags, extra):
- config_entry = self.config[arch, subarch, flavour]
+ config_entry = self.config['base', arch, subarch, flavour]
vars.update(config_entry)
vars['flavour'] = flavour
@@ -179,7 +179,7 @@
ret[1] = vars['abiname'] = version['modifier']
ret[2] = ""
else:
- ret[1] = vars['abiname'] = self.config['base']['abiname']
+ ret[1] = vars['abiname'] = self.config['base',]['abiname']
ret[2] = "-%s" % vars['abiname']
vars['version'] = version['version']
vars['major'] = version['major']
More information about the Kernel-svn-changes
mailing list