[kernel] r10800 - in people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig: menu package

Bastian Blank waldi at alioth.debian.org
Tue Mar 11 16:12:06 UTC 2008


Author: waldi
Date: Tue Mar 11 16:12:05 2008
New Revision: 10800

Log:
Update.

Modified:
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py
   people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py

Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py	(original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/all.py	Tue Mar 11 16:12:05 2008
@@ -5,7 +5,6 @@
 class All(object):
     def __init__(self, root, arches):
         self.files = {}
-        self.files_arch = {}
         self.filenames_all = []
         self.filenames_arch = {}
 
@@ -30,10 +29,13 @@
                     if isinstance(i, FileSource):
                         work.append(i.filename)
 
+        self.files_all = {}
+        for i in self.filenames_all:
+            self.files_all[i] = self.files[i]
+
+        self.files_arch = {}
         for arch in arches:
-            f = {}
-            for i in self.filenames_all:
-                f[i] = self.files[i]
+            f = self.files_all.copy()
             for i in self.filenames_arch[arch]:
                 f[i] = self.files[i]
             self.files_arch[arch] = f

Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py	(original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/menu/file.py	Tue Mar 11 16:12:05 2008
@@ -4,6 +4,24 @@
     def __init__(self, filename):
         self.filename = filename
 
+    def __lt__(self, other):
+        return self.filename < other.filename
+
+    def __le__(self, other):
+        return self.filename <= other.filename
+
+    def __eq__(self, other):
+        return self.filename == other.filename
+
+    def __ne__(self, other):
+        return self.filename != other.filename
+
+    def __gt__(self, other):
+        return self.filename > other.filename
+
+    def __ge__(self, other):
+        return self.filename >= other.filename
+
 class FileConfig(object):
     def __init__(self, name):
         self.name = name

Modified: people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py
==============================================================================
--- people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py	(original)
+++ people/waldi/utils/kconfigeditor2/lib/kconfigeditor/kconfig/package/files.py	Tue Mar 11 16:12:05 2008
@@ -2,8 +2,11 @@
 
 from debian_linux.config import ConfigCoreHierarchy
 
+from kconfigeditor.kconfig.menu.file import FileConfig
+
 class Files(dict):
     def __init__(self, root):
+        self.kernelarch = {}
         self.files = {}
         self.filenames = {}
         self.root = os.path.join(root, "debian/config")
@@ -17,10 +20,13 @@
                 if f in self.files:
                     f = self.files[f]
                 else:
-                    f = self.files.setdefault(f, File(None, f))
+                    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)
+
         kconfig = self.check_config("%s/config" % arch, True, arch)
         self.filenames[arch,] = kconfig
 
@@ -28,6 +34,7 @@
             self._read_featureset(arch, featureset)
 
     def _read_base(self):
+        self.kernelarch[()] = None
         self.filenames[()] = self.check_config('config', True)
 
         for arch in self.config['base',]['arches']:
@@ -38,6 +45,9 @@
         if featureset != 'none':
             return
 
+        config_entry = self.config.merge('base', arch, featureset)
+        self.kernelarch[arch, featureset] = config_entry.get('kernel-arch', 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))
@@ -47,6 +57,9 @@
             self._read_flavour(arch, featureset, flavour)
 
     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))
@@ -91,7 +104,86 @@
     def append_file(self, item):
         self._files.append(item)
 
-class File(object):
+class File(dict):
     def __init__(self, fd, filename):
         self.filename = filename
 
+        self.read(fd)
+
+    def _dump_file(self, fd, f):
+        ret = []
+        for i in f:
+            if isinstance(i, FileConfig):
+                e = self.get(i.name, None)
+                if e is not None:
+                    ret.append(e)
+        if ret:
+            ret[0:0] = ["##", "## file: %s" % f.filename, "##"]
+            ret.append('')
+        return ret
+
+    def dump(self, root, menufiles):
+        fd = file(os.path.join(root, self.filename), 'w')
+        ret = []
+        for f in menufiles:
+            ret.extend(self._dump_file(fd, f))
+        for i in ret:
+            fd.write(str(i) + "\n")
+
+    def read(self, f):
+        for line in iter(f.readlines()):
+            line = line.strip()
+            if line.startswith("CONFIG_"):
+                i = line.find('=')
+                option = line[7:i]
+                value = line[i+1:]
+                if value in ('y', 'm'):
+                    entry = FileEntryTristate(option, value)
+                else:
+                    entry = FileEntryString(option, value)
+                self[option] = entry
+            elif line.startswith("# CONFIG_"):
+                option = line[9:-11]
+                self[option] = FileEntryTristate(option)
+            elif line.startswith("#") or not line:
+                pass
+            else:
+                raise RuntimeError, "Can't recognize %s" % line
+
+# TODO
+class FileEntryString(object):
+    __slots__ = "name", "value"
+
+    def __init__(self, name, value):
+        self.name = name
+        self.value = value
+
+    def __str__(self):
+        return "CONFIG_%s=%s" % (self.name, self.value)
+
+# TODO
+class FileEntryTristate(object):
+    __slots__ = "name", "value"
+
+    VALUE_NO = 0
+    VALUE_YES = 1
+    VALUE_MOD = 2
+
+    def __init__(self, name, value = None):
+        self.name = name
+        if value == 'n' or value is None:
+            self.value = self.VALUE_NO
+        elif value == 'y':
+            self.value = self.VALUE_YES
+        elif value == 'm':
+            self.value = self.VALUE_MOD
+
+    def __str__(self):
+        conf = "CONFIG_%s" % self.name
+        if self.value == self.VALUE_NO:
+            return "# %s is not set" % conf
+        elif self.value == self.VALUE_YES:
+            return "%s=y" % conf
+        elif self.value == self.VALUE_MOD:
+            return "%s=m" % conf
+



More information about the Kernel-svn-changes mailing list