示例#1
0
文件: main.py 项目: DocOnDev/mythtv
    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)