Esempio n. 1
0
    def _setup_totest(self, project):
        fallback_project = 'openSUSE:%s' % project
        if project not in self.totest_class and fallback_project in self.totest_class:
            project = fallback_project

        project_base = project.split(':')[0]
        if not self.options.openqa_server:
            self.options.openqa_server = self.openqa_server[project_base]
        if not self.options.obs_api_url:
            self.options.obs_api_url = self.api_url[project_base]

        Config(project)
        if project not in self.totest_class:
            msg = 'Project %s not recognized. Possible values [%s]' % (
                project, ', '.join(self.totest_class))
            raise cmdln.CmdlnUserError(msg)

        if self.options.release:
            release = True
        elif self.options.norelease:
            release = False
        else:
            release = (project_base == 'openSUSE')

        return self.totest_class[project](project, self.options.dry, not release, self.options.obs_api_url, self.options.openqa_server)
Esempio n. 2
0
    def _setup_totest(self, project):
        Config('openSUSE:%s' % project)

        if project not in self.totest_class:
            msg = 'Project %s not recognized. Possible values [%s]' % (project, ', '.join(self.totest_class))
            raise cmdln.CmdlnUserError(msg)

        return self.totest_class[project](project, self.options.dry)
Esempio n. 3
0
    def _setup_totest(self, project):
        fallback_project = 'openSUSE:%s' % project
        if project not in self.totest_class and fallback_project in self.totest_class:
            project = fallback_project
        Config(project)
        if project not in self.totest_class:
            msg = 'Project %s not recognized. Possible values [%s]' % (
                project, ', '.join(self.totest_class))
            raise cmdln.CmdlnUserError(msg)

        return self.totest_class[project](project, self.options.dry, self.options.obs_api_url, self.options.openqa_server)
Esempio n. 4
0
    def do_solve(self, subcmd, opts):
        """${cmd_name}: Solve groups

        ${cmd_usage}
        ${cmd_option_list}
        """

        self.tool.load_all_groups()
        if not self.tool.output:
            logger.error('OUTPUT not defined')
            return

        if opts.ignore_unresolvable:
            self.tool.ignore_broken = True
        if opts.ignore_recommended:
            self.tool.ignore_recommended = True
        if opts.include_suggested:
            if opts.ignore_recommended:
                raise cmdln.CmdlnUserError(
                    "--ignore-recommended and --include-suggested don't work together"
                )
            self.tool.include_suggested = True
        if opts.locale:
            for l in opts.locale:
                self.tool.locales |= set(l.split(','))
        if opts.locales_from:
            with open(os.path.join(self.tool.input_dir, opts.locales_from),
                      'r') as fh:
                root = ET.parse(fh).getroot()
                self.tool.locales |= set([
                    lang.text for lang in root.findall(".//linguas/language")
                ])

        modules = []
        # the yml parser makes an array out of everything, so
        # we loop a bit more than what we support
        for group in self.tool.output:
            groupname = group.keys()[0]
            settings = group[groupname]
            includes = settings.get('includes', [])
            excludes = settings.get('excludes', [])
            self.tool.solve_module(groupname, includes, excludes)
            g = self.tool.groups[groupname]
            g.conflicts = settings.get('conflicts', [])
            modules.append(g)

        # not defined for openSUSE
        overlap = self.tool.groups.get('overlap')
        for module in modules:
            module.check_dups(modules, overlap)
            module.collect_devel_packages(modules)
            module.filter_already_selected(modules)

        if overlap:
            ignores = [x.name for x in overlap.ignored]
            self.tool.solve_module(overlap.name, [], ignores)
            overlapped = set(overlap.solved_packages['*'])
            for arch in overlap.architectures:
                overlapped |= set(overlap.solved_packages[arch])
            for module in modules:
                if module.name == 'overlap': continue
                for arch in ['*'] + module.architectures:
                    for p in overlapped:
                        module.solved_packages[arch].pop(p, None)

        self.tool._collect_unsorted_packages(modules)
        self.tool._write_all_groups()