[kernel] r10339 - people/waldi/dkt/lib/dkt/hooks/modules

Bastian Blank waldi at alioth.debian.org
Thu Jan 31 14:05:04 UTC 2008


Author: waldi
Date: Thu Jan 31 14:05:03 2008
New Revision: 10339

Log:
lib/dkt/hooks/modules/backward_config_boot.py: Support symlinks.


Modified:
   people/waldi/dkt/lib/dkt/hooks/modules/backward_config_boot.py

Modified: people/waldi/dkt/lib/dkt/hooks/modules/backward_config_boot.py
==============================================================================
--- people/waldi/dkt/lib/dkt/hooks/modules/backward_config_boot.py	(original)
+++ people/waldi/dkt/lib/dkt/hooks/modules/backward_config_boot.py	Thu Jan 31 14:05:03 2008
@@ -1,61 +1,105 @@
+import os
+
 from dkt.config.base import Config
 from dkt.hooks import default_registry, interfaces, register
 
 class Hook(object):
-    def _check_config(self, configs, version, image, initrd):
+    def _check_config(self, configs, version, data):
         for l in configs.itervalues():
-            if image == l.file:
+            if data[0] == l.file:
                 return
         c = {
-            'image':
-            {
+            'image': {
                 'type': 'linux',
                 'architecture': 'unknown',
-                'file': image,
+                'file': data[0],
                 'version': version,
                 'features': [],
             },
+            'backward': {
+                'symlink': data[2],
+            },
         }
-        if initrd is not None:
-            c['initramfs'] = {'file': initrd}
+        if data[1] is not None:
+            c['initramfs'] = {'file': data[1]}
         configs.add('boot-backward-' + version, Config(c))
 
     def _get_files(self):
-        import os
-        ret = []
+        ret = ([], [], [], [])
+
         for root, dirs, files in os.walk('/boot'):
             del dirs[:]
             for file in files:
-                if file.startswith("vmlinuz-") or \
-                   file.startswith("vmlinux-") or \
-                   file.startswith("initrd.img-"):
-                    ret.append(file)
+                real_file = os.path.join(root, file)
+                file_parts = file.split('-', 1)
+                if file_parts[0] in ("vmlinuz", "vmlinux"):
+                    if len(file_parts) > 1:
+                        ret[0].append((real_file, file_parts[1]))
+                    else:
+                        ret[2].append((real_file, file))
+                elif file in ("vmlinuz.old", "vmlinux.old"):
+                    ret[2].append((real_file, file))
+                elif file_parts[0] in ("initrd.img",):
+                    if len(file_parts) > 1:
+                        ret[1].append((real_file, file_parts[1]))
+                    else:
+                        ret[3].append((real_file, file))
+                elif file in ("initrd.img.old"):
+                    ret[3].append((real_file, file))
+
+        for root, dirs, files in os.walk('/'):
+            del dirs[:]
+            for file in files:
+                real_file = os.path.join(root, file)
+                if file in ("vmlinuz", "vmlinux"):
+                    ret[2].append((real_file, file))
+                elif file in ("initrd.img"):
+                    ret[3].append((real_file, file))
+
         return ret
 
     def _get_versions(self):
         files = self._get_files()
-
         versions = {}
-        for file in iter(files):
-            if file.startswith("vmlinuz-") or \
-               file.startswith("vmlinux-"):
-                version = file[8:]
-                e = versions.get(version, [None, None])
-                e[0] = "/boot/" + file
-                versions[version] = e
-            elif file.startswith("initrd.img-"):
-                if file.endswith('.bak'):
-                    file = file[:-4]
-                version = file[11:]
-                e = versions.get(version, [None, None])
-                e[1] = "/boot/" + file
-                versions[version] = e
+
+        for file in iter(files[0]):
+            if file[0].endswith('.bak'):
+                continue
+            version = file[1]
+            e = versions.setdefault(version, [None, None, None])
+            e[0] = file[0]
+
+        for file in iter(files[1]):
+            if file[0].endswith('.bak'):
+                continue
+            version = file[1]
+            e = versions.setdefault(version, [None, None, None])
+            e[1] = file[0]
+
+        for file in iter(files[2]):
+            if not os.path.islink(file[0]):
+                e = versions.setdefault("unknown", [None, None, None])
+                e[0] = file[0]
+            else:
+                link = os.readlink(file[0])
+                link_parts = os.path.basename(link).split('-', 1)
+                e = versions.get(link_parts[1], None)
+                if e is not None:
+                    if file[1].endswith('.old'):
+                        e[2] = 'old'
+                    else:
+                        e[2] = 'actual'
+
+        for file in iter(files[3]):
+            if not os.path.islink(file[0]):
+                e = versions.setdefault("unknown", [None, None, None])
+                e[1] = file[0]
 
         return versions
 
     def image_config(self, configs):
         versions = self._get_versions()
-        for version, (image, initrd) in versions.iteritems():
-            self._check_config(configs, version, image, initrd)
+        for version, data in versions.iteritems():
+            self._check_config(configs, version, data)
 
 register('backward-config-backward', interfaces.IImageConfig, Hook(), default_registry.PRIORITY_LAST)



More information about the Kernel-svn-changes mailing list