summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-05-29 11:26:33 +0000
committerZac Medico <zmedico@gentoo.org>2007-05-29 11:26:33 +0000
commit9709c10caf97845bd91b1f4eef7ece28ca88fb76 (patch)
tree655a40e2434657780d6b7d90bff15c0ada37754d
parentf80190b8492047950b3d8096e8a41a32fa97353e (diff)
downloadportage-9709c10caf97845bd91b1f4eef7ece28ca88fb76.tar.gz
portage-9709c10caf97845bd91b1f4eef7ece28ca88fb76.tar.bz2
portage-9709c10caf97845bd91b1f4eef7ece28ca88fb76.zip
For bug #179870, add support for cpv:slot in match_from_list() and use it to make config.setcpv() distinguish slot atoms in package.use.
svn path=/main/trunk/; revision=6657
-rw-r--r--pym/portage/__init__.py5
-rw-r--r--pym/portage/dep.py23
2 files changed, 14 insertions, 14 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 242bfb1b7..b6fa9535d 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -1737,7 +1737,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:
diff --git a/pym/portage/dep.py b/pym/portage/dep.py
index 98dda59f2..3f6b2a0ce 100644
--- a/pym/portage/dep.py
+++ b/pym/portage/dep.py
@@ -654,19 +654,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)
@@ -729,5 +717,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