Fix extended atom match for =* operator.
diff --git a/bin/portageq b/bin/portageq
index 280fe94..d9abb0b 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -583,17 +583,15 @@
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)
diff --git a/bin/quickpkg b/bin/quickpkg
index a6bd4d4..76259c5 100755
--- a/bin/quickpkg
+++ b/bin/quickpkg
@@ -21,7 +21,7 @@
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 @@
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)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index af42828..9a023a8 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -34,9 +34,9 @@
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 @@
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
- if vardb.match(atom):
- valid_atoms.append(Atom(atom, allow_repo=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
+
+ valid_atoms.append(atom)
else:
msg = []