[kernel] r13158 - in people/waldi/utils/kconfigeditor2: bin lib/kconfigeditor lib/kconfigeditor/kconfig
Bastian Blank
waldi at alioth.debian.org
Tue Mar 17 18:36:26 UTC 2009
Author: waldi
Date: Tue Mar 17 18:36:23 2009
New Revision: 13158
Log:
* bin/process.py: Update to new Files object.
* lib/kconfigeditor/kconfig/config.py
- Make a list before sorting.
- Remove filename attribute.
* lib/kconfigeditor/package.py: Rewrite collection of config files.
Modified:
people/waldi/utils/kconfigeditor2/bin/process.py
people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/config.py
people/waldi/utils/kconfigeditor2/lib/kconfigeditor/package.py
Modified: people/waldi/utils/kconfigeditor2/bin/process.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/bin/process.py (original)
+++ people/waldi/utils/kconfigeditor2/bin/process.py Tue Mar 17 18:36:23 2009
@@ -7,30 +7,20 @@
from kconfigeditor.package import Files
package = Files(package)
- arches = {}
- for i in package.kernelarch.values():
- if i is not None:
- arches[i] = 1
- arches = arches.keys()
-
- menu = All(source, arches)
-
- files = {}
- for key, filelist in package.iteritems():
- for f in filelist._files:
- files.setdefault(f.filename, (f, package.kernelarch[key]))
-
- for file, arch in files.itervalues():
- if arch is None:
- menufiles = menu.files_all.values()
+ menu = All(source, package.kernelarches())
+
+ for filename, data in package.items():
+ kernelarch = data['kernelarch']
+ if kernelarch:
+ menufiles = menu.files_arch[kernelarch].itervalues()
else:
- menufiles = menu.files_arch[arch].values()
+ menufiles = menu.files_all.itervalues()
- filename = os.path.join(config_output, file.filename)
+ filename = os.path.join(config_output, filename)
filename_tmp = filename + '.tmp'
f = open(filename_tmp, 'w')
try:
- file.write(f, menufiles, ignore_silent)
+ data['file'].write(f, menufiles)
f.close()
os.rename(filename_tmp, filename)
except:
Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/config.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/config.py (original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/config.py Tue Mar 17 18:36:23 2009
@@ -6,9 +6,7 @@
class File(dict):
- def __init__(self, fd, filename):
- self.filename = filename
-
+ def __init__(self, fd):
self.read(fd)
def _write(self, menufiles):
@@ -113,6 +111,7 @@
filename_list[-1] = filename_list[-1].replace('Kconfig.', '')
return filename_list
+ menufiles = list(menufiles)
menufiles.sort(key=menufiles_cmp_key)
for data in self._write(menufiles):
Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/package.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/package.py (original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/package.py Tue Mar 17 18:36:23 2009
@@ -7,103 +7,95 @@
from .kconfig.menu import MenuEntryChoice, MenuEntryConfig
from .kconfig.config import File
-class Files(dict):
+
+class Files(object):
def __init__(self, root):
- self.kernelarch = {}
- self.files = {}
- self.filenames = {}
- self.root = os.path.join(root, "debian/config")
- self.config = ConfigCoreHierarchy([self.root])
-
- self._read_base()
-
- for key, files in self.filenames.iteritems():
- r = self.setdefault(key, FileList())
- for f in files:
- if f in self.files:
- f = self.files[f]
- else:
- f = self.files.setdefault(f, File(file(os.path.join(self.root, f)), f))
- r.append_file(f)
-
- def _read_arch(self, arch):
- config_entry = self.config.merge('base', arch)
- self.kernelarch[arch,] = config_entry.get('kernel-arch', arch)
+ self.config_root = os.path.join(root, "debian/config")
+ self.config = ConfigCoreHierarchy([self.config_root])
- kconfig = self.check_config("%s/config" % arch, True, arch)
- self.filenames[arch,] = kconfig
+ self.files = files = {}
- for featureset in self.config['base', arch]['featuresets']:
- self._read_featureset(arch, featureset)
+ for filename, key, kernelarch in self._collect():
+ if filename in files:
+ data = files[filename]
+ data['keys'].append(key)
+ if data['kernelarch'] != kernelarch:
+ data['kernelarch'] = None
+ else:
+ file = File(open(os.path.join(self.config_root, filename)))
+ files[filename] = {'file': file, 'keys': [key], 'kernelarch': kernelarch}
- def _read_base(self):
- self.kernelarch[()] = None
- self.filenames[()] = self.check_config('config', True)
+ def _collect(self):
+ for filename in self._check_config('config'):
+ yield filename, (), None
for arch in self.config['base',]['arches']:
- self._read_arch(arch)
+ for data in self._collect_arch(arch):
+ yield data
+
+ def _collect_arch(self, arch):
+ key = arch,
+ kernelarch = self.config.merge('base', arch).get('kernel-arch')
- def _read_featureset(self, arch, featureset):
+ for filename in self._check_config("%s/config" % arch, arch):
+ yield filename, key, kernelarch
+
+ for featureset in self.config['base', arch]['featuresets']:
+ for data in self._collect_featureset(arch, featureset):
+ yield data
+
+ def _collect_featureset(self, arch, featureset):
# TODO
if featureset != 'none':
return
- config_entry = self.config.merge('base', arch, featureset)
- self.kernelarch[arch, featureset] = config_entry.get('kernel-arch', arch)
+ key = arch, featureset
+ kernelarch = self.config.merge('base', arch, featureset).get('kernel-arch')
- kconfig = []
- kconfig.extend(self.check_config("featureset-%s/config" % featureset, False, None, featureset))
- kconfig.extend(self.check_config("%s/%s/config" % (arch, featureset), False, arch, featureset))
- self.filenames[arch, featureset] = kconfig
+ for filename in self._check_config("featureset-%s/config" % featureset, None, featureset):
+ yield filename, key, kernelarch
+ for filename in self._check_config("%s/%s/config" % (arch, featureset), arch, featureset):
+ yield filename, key, kernelarch
for flavour in self.config['base', arch, featureset]['flavours']:
- self._read_flavour(arch, featureset, flavour)
+ for data in self._collect_flavour(arch, featureset, flavour):
+ yield data
- def _read_flavour(self, arch, featureset, flavour):
- config_entry = self.config.merge('base', arch, featureset, flavour)
- self.kernelarch[arch, featureset, flavour] = config_entry.get('kernel-arch', arch)
-
- kconfig = []
- kconfig.extend(self.check_config("%s/config.%s" % (arch, flavour), False, arch, None, flavour))
- kconfig.extend(self.check_config("%s/%s/config.%s" % (arch, featureset, flavour), False, arch, featureset, flavour))
- self.filenames[arch, featureset, flavour] = kconfig
+ def _collect_flavour(self, arch, featureset, flavour):
+ key = arch, featureset, flavour
+ kernelarch = self.config.merge('base', arch, featureset, flavour).get('kernel-arch')
+
+ for filename in self._check_config("%s/config.%s" % (arch, flavour), arch, None, flavour):
+ yield filename, key, kernelarch
+ for filename in self._check_config("%s/%s/config.%s" % (arch, featureset, flavour), arch, featureset, flavour):
+ yield filename, key, kernelarch
+
+ def _check_config_default(self, f):
+ if os.path.exists(os.path.join(self.config_root, f)):
+ yield f
- def _get_config(self, *entry_name):
- entry_real = ('image',) + entry_name
- entry = self.config.get(entry_real, None)
- if entry is None:
- return None
- return entry.get('configs', None)
-
- def check_config_default(self, fail, f):
- f1 = self.root + '/' + f
- if os.path.exists(f1):
- return [f]
- if fail:
- raise RuntimeError("%s unavailable" % f)
- return []
-
- def check_config_files(self, files):
- ret = []
+ def _check_config_files(self, files):
for f in files:
- f1 = self.root + '/' + f
- if os.path.exists(f1):
- ret.append(f)
- break
- else:
- raise RuntimeError("%s unavailable" % f)
- return ret
-
- def check_config(self, default, fail, *entry_name):
- configs = self._get_config(*entry_name)
- if configs is None:
- return self.check_config_default(fail, default)
- return self.check_config_files(configs)
-
-class FileList(object):
- def __init__(self):
- self._files = []
-
- def append_file(self, item):
- self._files.append(item)
+ if os.path.exists(os.path.join(self.config_root, f)):
+ yield f
+ def _check_config(self, default, *entry_name):
+ entry_real = ('image',) + entry_name
+ entry = self.config.get(entry_real)
+ if entry:
+ configs = entry.get('configs')
+ if configs:
+ return self._check_config_files(configs)
+ return self._check_config_default(default)
+
+ def items(self):
+ for i in self.files.iteritems():
+ yield i
+
+ def kernelarches(self):
+ ret = set()
+ for data in self.files.itervalues():
+ kernelarch = data['kernelarch']
+ if kernelarch:
+ ret.add(kernelarch)
+ return ret
More information about the Kernel-svn-changes
mailing list