# Copyright 2005-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import portage from portage import os from portage.const import PRIVATE_PATH from portage.util import grabdict, writedict class CleanConfig(object): short_desc = "Discard any no longer installed configs from emerge's tracker list" def __init__(self): self._root = portage.settings["ROOT"] self.target = os.path.join(portage.settings["EROOT"], PRIVATE_PATH, 'config') def name(): return "cleanconfmem" name = staticmethod(name) def load_configlist(self): return grabdict(self.target) def check(self, **kwargs): onProgress = kwargs.get('onProgress', None) configs = self.load_configlist() messages = [] maxval = len(configs) if onProgress: onProgress(maxval, 0) i = 0 keys = sorted(configs) for config in keys: if not os.path.exists(config): messages.append(" %s" % config) if onProgress: onProgress(maxval, i+1) i += 1 return self._format_output(messages) def fix(self, **kwargs): onProgress = kwargs.get('onProgress', None) configs = self.load_configlist() messages = [] maxval = len(configs) if onProgress: onProgress(maxval, 0) i = 0 root = self._root if root == "/": root = None modified = False for config in sorted(configs): if root is None: full_path = config else: full_path = os.path.join(root, config.lstrip(os.sep)) if not os.path.exists(full_path): modified = True configs.pop(config) messages.append(" %s" % config) if onProgress: onProgress(maxval, i+1) i += 1 if modified: writedict(configs, self.target) return self._format_output(messages, True) def _format_output(self, messages=[], cleaned=False): output = [] if messages: output.append('Not Installed:') output += messages tot = '------------------------------------\n Total %i Not installed' if cleaned: tot += ' ...Cleaned' output.append(tot % len(messages)) return output