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) _______________________________________________ Kernel-svn-changes mailing list Kernel-svn-changes@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes