[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