summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage.py12
-rw-r--r--pym/portage_dep.py7
2 files changed, 15 insertions, 4 deletions
diff --git a/pym/portage.py b/pym/portage.py
index 3f3e378ae..21b8d1817 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -3818,6 +3818,18 @@ def getCPFromCPV(mycpv):
"""Calls pkgsplit on a cpv and returns only the cp."""
return pkgsplit(mycpv)[0]
+def cpvequal(cpv1, cpv2):
+ split1 = catpkgsplit(cpv1)
+ split2 = catpkgsplit(cpv2)
+
+ if not split1 or not split2:
+ raise portage_exception.PortageException("Invalid data, parameter was not a CPV")
+
+ if split1[0] != split2[0]:
+ return False
+
+ return (pkgcmp(split1[1:], split2[1:]) == 0)
+
def dep_virtual(mysplit, mysettings):
"Does virtual dependency conversion"
diff --git a/pym/portage_dep.py b/pym/portage_dep.py
index ef6486f19..60b75e03a 100644
--- a/pym/portage_dep.py
+++ b/pym/portage_dep.py
@@ -568,19 +568,18 @@ def match_from_list(mydep, candidate_list):
mylist.append(x)
elif operator == "=": # Exact match
- if mycpv in candidate_list:
- mylist = [mycpv]
+ mylist = [cpv for cpv in candidate_list if cpvequal(cpv, mycpv)]
elif operator == "=*": # glob match
# The old verion ignored _tag suffixes... This one doesn't.
for x in candidate_list:
- if x[0:len(mycpv)] == mycpv:
+ if cpvequal(x[0:len(mycpv)], mycpv):
mylist.append(x)
elif operator == "~": # version, any revision, match
for x in candidate_list:
xs = catpkgsplit(x)
- if xs[0:2] != mycpv_cps[0:2]:
+ if not cpvequal(xs[0]+"/"+xs[1]+"-"+xs[2], mycpv_cps[0]+"/"+mycpv_cps[1]+"-"+mycpv_cps[2]):
continue
if xs[2] != ver:
continue