def gather(self, debug=False): def _stage(text): print 'Processing %s' % (text) # Local imports to not pull missing dependencies in # on non-Gentoo machines. from globaluseflags import GlobalUseFlags from compileflags import CompileFlags from mirrors import Mirrors from overlays import Overlays from packagestar import PackageMask from systemprofile import SystemProfile from trivials import Trivials from features import Features from installedpackages import InstalledPackages _stage('global use flags') global_use_flags = GlobalUseFlags() _stage('compile flags') compile_flags = CompileFlags() _stage('mirrors') mirrors = Mirrors(debug=debug) _stage('overlays') overlays = Overlays() _stage('package.mask entries') user_package_mask = PackageMask() _stage('features') features = Features() _stage('trivials') trivials = Trivials() _stage('installed packages (takes some time)') if debug: def cb_enter(cpv, i, count): print '[% 3d%%] %s' % (i * 100 / count, cpv) else: def cb_enter(*_): pass installed_packages = InstalledPackages(debug=debug, cb_enter=cb_enter) machine_data = {} html_lines = [] rst_lines = [] metrics_dict = {} html_lines.append('<h1>Gentoo</h1>') rst_lines.append('Gentoo') rst_lines.append('=================================') rst_lines.append('') machine_data['protocol'] = '1.2' trivials.dump_html(html_lines) trivials.dump_rst(rst_lines) rst_lines.append('') trivials.get_metrics(metrics_dict) machine_data['features'] = features.serialize() features.dump_html(html_lines) features.dump_rst(rst_lines) rst_lines.append('') features.get_metrics(metrics_dict) machine_data['call_flags'] = compile_flags.serialize() compile_flags.dump_html(html_lines) compile_flags.dump_rst(rst_lines) rst_lines.append('') compile_flags.get_metrics(metrics_dict) machine_data['mirrors'] = mirrors.serialize() mirrors.dump_html(html_lines) mirrors.dump_rst(rst_lines) rst_lines.append('') mirrors.get_metrics(metrics_dict) machine_data['repos'] = overlays.serialize() overlays.dump_html(html_lines) overlays.dump_rst(rst_lines) rst_lines.append('') overlays.get_metrics(metrics_dict) machine_data['user_package_mask'] = user_package_mask.serialize() user_package_mask.dump_html(html_lines) user_package_mask.dump_rst(rst_lines) rst_lines.append('') user_package_mask.get_metrics(metrics_dict) machine_data['global_use_flags'] = global_use_flags.serialize() global_use_flags.dump_html(html_lines) global_use_flags.dump_rst(rst_lines) rst_lines.append('') global_use_flags.get_metrics(metrics_dict) machine_data['installed_packages'] = installed_packages.serialize() installed_packages.dump_html(html_lines) installed_packages.dump_rst(rst_lines) installed_packages.get_metrics(metrics_dict) for container in (trivials, ): for k, v in container.serialize().items(): key = k.lower() if key in machine_data: raise Exception('Unintended key collision') machine_data[key] = v machine_data['privacy_metrics'] = metrics_dict self.dump_metrics_html(html_lines, metrics_dict) rst_lines.append('') self.dump_metrics_rst(rst_lines, metrics_dict) excerpt_lines = [] excerpt_lines.append('ACCEPT_KEYWORDS: ' + ' '.join(trivials.serialize()['accept_keywords'])) excerpt_lines.append('CXXFLAGS: ' + ' '.join(compile_flags.serialize()['cxxflags'])) excerpt_lines.append('MAKEOPTS: ' + ' '.join(compile_flags.serialize()['makeopts'])) excerpt_lines.append('...') self._data = machine_data self._html = '\n'.join(html_lines) self._rst = '\n'.join(rst_lines) self._excerpt = '\n'.join(excerpt_lines)