Fix extended atom match for =* operator.
authorZac Medico <zmedico@gentoo.org>
Wed, 18 Jul 2012 21:38:09 +0000 (14:38 -0700)
committerZac Medico <zmedico@gentoo.org>
Wed, 18 Jul 2012 21:38:09 +0000 (14:38 -0700)
bin/portageq
bin/quickpkg
pym/_emerge/actions.py

index 280fe94c2f57e82c11fbc6e6d50887a8d8fbb975..d9abb0bad73775825acbe9ae87b315ce01c964bb 100755 (executable)
@@ -583,17 +583,15 @@ def match(argv):
                        require_metadata = atom.slot or atom.repo
                        for cpv in vardb.cpv_all():
 
-                               if not portage.dep.extended_cp_match(
-                                       atom.cp, portage.cpv_getkey(cpv)):
+                               if not portage.match_from_list(atom, [cpv]):
                                        continue
 
                                if require_metadata:
-                                       slot, repo = vardb.aux_get(cpv, ["SLOT", "repository"])
-
-                                       if atom.slot is not None and atom.slot != slot:
+                                       try:
+                                               cpv = vardb._pkg_str(cpv, atom.repo)
+                                       except (KeyError, portage.exception.InvalidData):
                                                continue
-
-                                       if atom.repo is not None and atom.repo != repo:
+                                       if not portage.match_from_list(atom, [cpv]):
                                                continue
 
                                results.append(cpv)
index a6bd4d4bd5413e91e67a29d1aa1e36ae59c3a04e..76259c5c1d546eaa7a3dd35fdeb4bd806e9d4257 100755 (executable)
@@ -21,7 +21,7 @@ except ImportError:
 from portage import os
 from portage import xpak
 from portage.dbapi.dep_expand import dep_expand
-from portage.dep import Atom, extended_cp_match, use_reduce
+from portage.dep import Atom, use_reduce
 from portage.exception import (AmbiguousPackageName, InvalidAtom, InvalidData,
        InvalidDependString, PackageSetNotFound, PermissionDenied)
 from portage.util import ConfigProtect, ensure_dirs, shlex_split
@@ -204,16 +204,15 @@ def quickpkg_extended_atom(options, infos, atom, eout):
                        atoms.append(cpv_atom)
                        continue
 
-               if not extended_cp_match(atom.cp, cpv_atom.cp):
+               if not portage.match_from_list(atom, [cpv]):
                        continue
 
                if require_metadata:
-                       slot, repo = vardb.aux_get(cpv, ["SLOT", "repository"])
-
-                       if atom.slot and atom.slot != slot:
+                       try:
+                               cpv = vardb._pkg_str(cpv, atom.repo)
+                       except (KeyError, InvalidData):
                                continue
-
-                       if atom.repo and atom.repo != repo:
+                       if not portage.match_from_list(atom, [cpv]):
                                continue
 
                atoms.append(cpv_atom)
index af42828d149b5b803cd7d836d1965ae5a0710479..9a023a84a11515adb34aaf8b1930409666dd5eae 100644 (file)
@@ -34,9 +34,9 @@ from portage.const import GLOBAL_CONFIG_PATH
 from portage.const import _ENABLE_DYN_LINK_MAP
 from portage.dbapi.dep_expand import dep_expand
 from portage.dbapi._expand_new_virt import expand_new_virt
-from portage.dep import Atom, extended_cp_match
+from portage.dep import Atom
 from portage.eclass_cache import hashed_path
-from portage.exception import InvalidAtom
+from portage.exception import InvalidAtom, InvalidData
 from portage.output import blue, bold, colorize, create_color_func, darkgreen, \
        red, yellow
 good = create_color_func("GOOD")
@@ -2594,16 +2594,30 @@ def action_uninstall(settings, trees, ldpath_mtimes,
                                        level=logging.ERROR, noiselevel=-1)
                                return 1
 
-                       for cp in vardb.cp_all():
-                               if extended_cp_match(ext_atom.cp, cp):
-                                       atom = cp
+                       for cpv in vardb.cpv_all():
+                               if portage.match_from_list(ext_atom, [cpv]):
+                                       require_metadata = False
+                                       atom = portage.cpv_getkey(cpv)
+                                       if ext_atom.operator == '=*':
+                                               atom = "=" + atom + "-" + \
+                                                       portage.versions.cpv_getversion(cpv)
                                        if ext_atom.slot:
                                                atom += ":" + ext_atom.slot
+                                               require_metadata = True
                                        if ext_atom.repo:
                                                atom += "::" + ext_atom.repo
+                                               require_metadata = True
+
+                                       atom = Atom(atom, allow_repo=True)
+                                       if require_metadata:
+                                               try:
+                                                       cpv = vardb._pkg_str(cpv, ext_atom.repo)
+                                               except (KeyError, InvalidData):
+                                                       continue
+                                               if not portage.match_from_list(atom, [cpv]):
+                                                       continue
 
-                                       if vardb.match(atom):
-                                               valid_atoms.append(Atom(atom, allow_repo=True))
+                                       valid_atoms.append(atom)
 
                else:
                        msg = []