For bug #179870, add support for cpv:slot in match_from_list() and use it to make...
authorZac Medico <zmedico@gentoo.org>
Tue, 29 May 2007 11:29:13 +0000 (11:29 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 29 May 2007 11:29:13 +0000 (11:29 -0000)
svn path=/main/branches/2.1.2/; revision=6658

pym/portage.py
pym/portage_dep.py

index 03733fa915016c4868d5dedc65f919d5ca9ab278..7c4fa43e9a15ea61841939c1a27b22bb8120a9c2 100644 (file)
@@ -1724,7 +1724,10 @@ class config:
                oldpuse = self.puse
                self.puse = ""
                if self.pusedict.has_key(cp):
-                       self.pusekey = best_match_to_list(self.mycpv, self.pusedict[cp].keys())
+                       cpv_slot = self.mycpv
+                       if mydb:
+                               cpv_slot += ":" + mydb.aux_get(self.mycpv, ["SLOT"])[0]
+                       self.pusekey = best_match_to_list(cpv_slot, self.pusedict[cp].keys())
                        if self.pusekey:
                                self.puse = " ".join(self.pusedict[cp][self.pusekey])
                if oldpuse != self.puse:
index 0b89d9b3e554d5a89a21b4e8700903b3eef7d72e..7d9f5e0ea54ded66232c7cac6c13aac988a71467 100644 (file)
@@ -568,19 +568,7 @@ def match_from_list(mydep, candidate_list):
 
        if operator is None:
                for x in candidate_list:
-                       xs = pkgsplit(x)
-                       if xs is None:
-                               xcpv = dep_getcpv(x)
-                               if slot is not None:
-                                       xslot = dep_getslot(x)
-                                       if xslot is not None and xslot != slot:
-                                               """  This function isn't given enough information to
-                                               reject atoms based on slot unless *both* compared atoms
-                                               specify slots."""
-                                               continue
-                               if xcpv != mycpv:
-                                       continue
-                       elif xs[0] != mycpv:
+                       if dep_getkey(x) != mycpv:
                                continue
                        mylist.append(x)
 
@@ -643,5 +631,14 @@ def match_from_list(mydep, candidate_list):
        else:
                raise KeyError("Unknown operator: %s" % mydep)
 
+       if slot is not None:
+               candidate_list = mylist
+               mylist = []
+               for x in candidate_list:
+                       xslot = dep_getslot(x)
+                       if xslot is not None and xslot != slot:
+                               continue
+                       mylist.append(x)
+
        _match_from_list_cache[cache_key] = mylist
        return mylist