Esempio n. 1
0
    def get_best_selector(self, sack, forms=None):
        # :api
        sltr = dnf.selector.Selector(sack)

        if is_glob_pattern(self.pattern):
            s = sltr.set(provides__glob=self.pattern)
            if len(s.matches()) > 0:
                return s

        reldep = first(self.subj.reldep_possibilities_real(sack))
        if reldep:
            dep = str(reldep)
            s = sltr.set(provides=dep)
            if len(s.matches()) > 0:
                return s

        if forms:
            kwargs['form'] = forms
        nevra = first(self.subj.nevra_possibilities_real(sack, **kwargs))
        if nevra:
            s = self._nevra_to_selector(sltr, nevra)
            if len(s.matches()) > 0:
                return s

        kwargs = {'allow_globs': True}
        if self.filename_pattern:
            key = "file__glob" if is_glob_pattern(self.pattern) else "file"
            return sltr.set(**{key: self.pattern})

        return sltr
Esempio n. 2
0
    def get_best_selector(self, sack, forms=None):
        # :api

        kwargs = {'allow_globs': True}
        if forms:
            kwargs['form'] = forms
        nevra = first(self.subj.nevra_possibilities_real(sack, **kwargs))
        if nevra:
            sltr = dnf.selector.Selector(sack)
            s = self._nevra_to_selector(sltr, nevra)
            if len(s.matches()) > 0:
                return s

        reldep = first(self.subj.reldep_possibilities_real(sack))
        if reldep:
            sltr = dnf.selector.Selector(sack)
            dep = str(reldep)
            s = sltr.set(provides=dep)
            if len(s.matches()) > 0:
                return s

        if self.filename_pattern:
            sltr = dnf.selector.Selector(sack)
            key = "file__glob" if is_glob_pattern(self.pattern) else "file"
            return sltr.set(**{key: self.pattern})

        sltr = dnf.selector.Selector(sack)
        return sltr
Esempio n. 3
0
 def _is_arch_specified(self, sack):
     for nevra in self.subj.nevra_possibilities():
         if nevra:
             q = self._nevra_to_filters(sack.query(), nevra)
             if q:
                 if nevra.arch:
                     return is_glob_pattern(nevra.arch)
     return False
Esempio n. 4
0
 def _is_arch_specified(self, sack):
     for nevra in self.get_nevra_possibilities():
         if nevra:
             q = self._nevra_to_filters(sack.query(), nevra)
             if q:
                 if nevra.arch:
                     return is_glob_pattern(nevra.arch)
     return False
Esempio n. 5
0
    def _get_best_selectors(self,
                            base,
                            forms=None,
                            obsoletes=True,
                            reponame=None,
                            reports=False,
                            solution=None):
        if solution is None:
            solution = self._get_nevra_solution(base.sack, forms=forms)
        q = solution['query']
        q = q.filter(arch__neq="src")
        if len(q) == 0:
            if reports and not self.icase:
                base._report_icase_hint(self._pattern)
            return []
        q = self._apply_security_filters(q, base)
        if not q:
            return []

        if not self._filename_pattern and is_glob_pattern(self._pattern) \
                or solution['nevra'] and solution['nevra'].name is None:
            with_obsoletes = False

            if obsoletes and solution['nevra'] and solution[
                    'nevra'].has_just_name():
                with_obsoletes = True
            installed_query = q.installed()
            if reponame:
                q = q.filter(reponame=reponame)
            available_query = q.available()
            installed_relevant_query = installed_query.filter(
                name=[pkg.name for pkg in available_query])
            if reports:
                self._report_installed(installed_relevant_query)
            q = available_query.union(installed_relevant_query)
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                if with_obsoletes:
                    pkgs_list = pkgs_list + base.sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltrs.append(
                    self._list_or_query_to_selector(base.sack, pkgs_list))
            return sltrs
        else:
            if obsoletes and solution['nevra'] and solution[
                    'nevra'].has_just_name():
                q = q.union(base.sack.query().filter(obsoletes=q))
            installed_query = q.installed()

            if reports:
                self._report_installed(installed_query)
            if reponame:
                q = q.filter(reponame=reponame).union(installed_query)
            if not q:
                return []

            return [self._list_or_query_to_selector(base.sack, q)]
Esempio n. 6
0
File: subject.py Progetto: zde/dnf
 def _nevra_to_filters(self, query, nevra):
     if nevra.name is not None:
         if is_glob_pattern(nevra.name):
             query.filterm(*self._query_flags, name__glob=nevra.name)
         else:
             query.filterm(*self._query_flags, name=nevra.name)
     if nevra.arch is not None:
         query.filterm(arch=nevra.arch)
     if nevra.epoch is not None:
         query.filterm(epoch=nevra.epoch)
     if nevra.version is not None:
         version = nevra.version
         if is_glob_pattern(version):
             query.filterm(version__glob=version)
         else:
             query.filterm(version=version)
     if nevra.release is not None:
         query.filterm(release=nevra.release)
     return query
Esempio n. 7
0
    def get_best_selectors(self, sack, forms=None):
        if not self.filename_pattern and is_glob_pattern(self.pattern):
            nevras = self.subj.nevra_possibilities_real(sack, allow_globs=True)
            nevra = first(nevras)
            if nevra and nevra.name:
                sltrs = []
                pkgs = self._nevra_to_filters(sack.query(), nevra)
                for pkg_name in {pkg.name for pkg in pkgs}:
                    exp_name = self.pattern.replace(nevra.name, pkg_name, 1)
                    sltrs.append(Subject(exp_name).get_best_selector(sack, forms))
                return sltrs

        return [self.get_best_selector(sack, forms)]
Esempio n. 8
0
    def _get_best_selectors(self, base, forms=None, obsoletes=True, reponame=None, reports=False,
                            solution=None):
        if solution is None:
            solution = self._get_nevra_solution(base.sack, forms=forms)
        q = solution['query']
        q = q.filter(arch__neq="src")
        if len(q) == 0:
            if reports and not self.icase:
                base._report_icase_hint(self._pattern)
            return []
        q = self._apply_security_filters(q, base)
        if not q:
            return []

        if not self._filename_pattern and is_glob_pattern(self._pattern) \
                or solution['nevra'] and solution['nevra'].name is None:
            with_obsoletes = False

            if obsoletes and solution['nevra'] and solution['nevra'].has_just_name():
                with_obsoletes = True
            installed_query = q.installed()
            if reponame:
                q = q.filter(reponame=reponame)
            available_query = q.available()
            installed_relevant_query = installed_query.filter(
                name=[pkg.name for pkg in available_query])
            if reports:
                self._report_installed(installed_relevant_query)
            q = available_query.union(installed_relevant_query)
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                if with_obsoletes:
                    pkgs_list = pkgs_list + base.sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltrs.append(self._list_or_query_to_selector(base.sack, pkgs_list))
            return sltrs
        else:
            if obsoletes and solution['nevra'] and solution['nevra'].has_just_name():
                q = q.union(base.sack.query().filter(obsoletes=q))
            installed_query = q.installed()

            if reports:
                self._report_installed(installed_query)
            if reponame:
                q = q.filter(reponame=reponame).union(installed_query)
            if not q:
                return []

            return [self._list_or_query_to_selector(base.sack, q)]
Esempio n. 9
0
    def _get_best_selectors(self, sack, forms=None, obsoletes=True):
        if not self._filename_pattern and is_glob_pattern(self._pattern):
            with_obsoletes = False
            if obsoletes and self._has_nevra_just_name(sack, forms=forms):
                with_obsoletes = True
            q = self.get_best_query(sack, forms=forms).filter(arch__neq="src")
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                sltr = dnf.selector.Selector(sack)
                if with_obsoletes:
                    pkgs_list = pkgs_list + sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltr.set(pkg=pkgs_list)
                sltrs.append(sltr)
            return sltrs

        return [self.get_best_selector(sack, forms, obsoletes)]
Esempio n. 10
0
    def _get_best_selectors(self, sack, forms=None):
        if not self._filename_pattern and is_glob_pattern(self._pattern):
            with_obsoletes = False
            if self._has_nevra_just_name(sack, forms=forms):
                with_obsoletes = True
            q = self.get_best_query(sack, forms=forms)
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                sltr = dnf.selector.Selector(sack)
                if with_obsoletes:
                    pkgs_list = pkgs_list + sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltr.set(pkg=pkgs_list)
                sltrs.append(sltr)
            return sltrs

        return [self.get_best_selector(sack, forms)]
Esempio n. 11
0
    def _get_best_selectors(self, sack, forms=None, obsoletes=True):
        if not self._filename_pattern and is_glob_pattern(self._pattern):
            with_obsoletes = False
            solution = self._get_nevra_solution(sack, forms=forms)
            q = solution['query']
            if obsoletes and solution['nevra'] and solution['nevra']._has_just_name():
                with_obsoletes = True
            q = q.filter(arch__neq="src")
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                sltr = dnf.selector.Selector(sack)
                if with_obsoletes:
                    pkgs_list = pkgs_list + sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltr.set(pkg=pkgs_list)
                sltrs.append(sltr)
            return sltrs

        return [self.get_best_selector(sack, forms, obsoletes)]
Esempio n. 12
0
    def _get_best_selectors(self,
                            sack,
                            forms=None,
                            obsoletes=True,
                            reponame=None,
                            reports=False):
        if not self._filename_pattern and is_glob_pattern(self._pattern):
            with_obsoletes = False
            solution = self._get_nevra_solution(sack, forms=forms)
            q = solution['query']
            q = q.filter(arch__neq="src")
            if obsoletes and solution['nevra'] and solution[
                    'nevra']._has_just_name():
                with_obsoletes = True
            installed_query = q.installed()
            if reponame:
                q = q.filter(reponame=reponame)
            available_query = q.available()
            installed_relevant_query = installed_query.filter(
                name=[pkg.name for pkg in available_query])
            if reports:
                for pkg in installed_relevant_query:
                    dnf.base._msg_installed(pkg)
            q = available_query.union(installed_relevant_query)
            sltrs = []
            for name, pkgs_list in q._name_dict().items():
                sltr = dnf.selector.Selector(sack)
                if with_obsoletes:
                    pkgs_list = pkgs_list + sack.query().filter(
                        obsoletes=pkgs_list).run()
                sltr.set(pkg=pkgs_list)
                sltrs.append(sltr)
            return sltrs

        return [
            self.get_best_selector(sack,
                                   forms,
                                   obsoletes,
                                   reponame=reponame,
                                   reports=reports)
        ]
Esempio n. 13
0
 def is_arch_specified(self, sack):
     nevra = first(
         self.subj.nevra_possibilities_real(sack, allow_globs=True))
     if nevra and nevra.arch:
         return is_glob_pattern(nevra.arch)
     return False
Esempio n. 14
0
 def is_arch_specified(self, sack):
     nevra = first(self.subj.nevra_possibilities_real(sack, allow_globs=True))
     if nevra and nevra.arch:
         return is_glob_pattern(nevra.arch)
     return False
Esempio n. 15
0
 def _is_arch_specified(self, solution):
     if solution['nevra'] and solution['nevra'].arch:
         return is_glob_pattern(solution['nevra'].arch)
     return False
Esempio n. 16
0
 def _is_arch_specified(self, solution):
     if solution['nevra'] and solution['nevra'].arch:
         return is_glob_pattern(solution['nevra'].arch)
     return False