diff options
author | fuzzyray <fuzzyray@gentoo.org> | 2010-03-12 21:44:29 +0000 |
---|---|---|
committer | fuzzyray <fuzzyray@gentoo.org> | 2010-03-12 21:44:29 +0000 |
commit | 1ddc073811b7b69aab22cd65990bbca8e7104bef (patch) | |
tree | 5ca2ef92478538f44b6abc9a96a8110b559fa867 /pym/gentoolkit/query.py | |
parent | Remove stray analyse script (diff) | |
download | gentoolkit-1ddc073811b7b69aab22cd65990bbca8e7104bef.tar.gz gentoolkit-1ddc073811b7b69aab22cd65990bbca8e7104bef.tar.bz2 gentoolkit-1ddc073811b7b69aab22cd65990bbca8e7104bef.zip |
Update to genscripts rev 382. This has more fixes for py3k and the modular rewrite of eclean.
svn path=/trunk/gentoolkit/; revision=755
Diffstat (limited to 'pym/gentoolkit/query.py')
-rw-r--r-- | pym/gentoolkit/query.py | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/pym/gentoolkit/query.py b/pym/gentoolkit/query.py index 110337e..764f82b 100644 --- a/pym/gentoolkit/query.py +++ b/pym/gentoolkit/query.py @@ -19,6 +19,7 @@ __all__ = ( import fnmatch import re from functools import partial +from string import ascii_letters import portage @@ -30,7 +31,6 @@ from gentoolkit.cpv import CPV from gentoolkit.dbapi import PORTDB, VARDB from gentoolkit.package import Package from gentoolkit.sets import get_set_atoms, SETPREFIX -#from gentoolkit.helpers import * # ======= # Classes @@ -46,6 +46,11 @@ class Query(object): @param is_regex: query is a regular expression """ + # We need at least one of these chars for a valid query + needed_chars = ascii_letters + '*' + if not set(query).intersection(needed_chars): + raise errors.GentoolkitInvalidPackage(query) + # Separate repository repository = None if query.count(':') == 2: @@ -95,6 +100,7 @@ class Query(object): in_overlay=True, include_masked=True, show_progress=True, + no_matches_fatal=True, **kwargs ): """A high-level wrapper around gentoolkit package-finder functions. @@ -107,6 +113,8 @@ class Query(object): @param in_overlay: search for query in overlays @type show_progress: bool @param show_progress: output search progress + @type no_matches_fatal: bool + @param no_matches_fatal: raise errors.GentoolkitNoMatches @rtype: list @return: Package objects matching query """ @@ -123,8 +131,9 @@ class Query(object): complex_package_finder = helpers.get_installed_cpvs elif in_porttree or in_overlay: simple_package_finder = partial( - helpers.find_packages, - include_masked=include_masked + self.find, + include_masked=include_masked, + in_installed=False ) complex_package_finder = helpers.get_uninstalled_cpvs else: @@ -149,6 +158,9 @@ class Query(object): if self.repo_filter is not None: matches = self._filter_by_repository(matches) + if no_matches_fatal and not matches: + ii = in_installed and not (in_porttree or in_overlay) + raise errors.GentoolkitNoMatches(self.query, in_installed=ii) return matches def find(self, in_installed=True, include_masked=True): @@ -208,7 +220,7 @@ class Query(object): raise errors.GentoolkitInvalidAtom(err) # xmatch can return an empty string, so checking for None is not enough if not best: - if not include_keyworded or include_masked: + if not (include_keyworded or include_masked): return None try: matches = PORTDB.xmatch("match-all", self.query) @@ -351,4 +363,3 @@ class Query(object): elif self.is_regex or self.uses_globbing(): return "complex" return "simple" - |