From 650ab45c0dfa16b57cc01fcc03020c1032a672c7 Mon Sep 17 00:00:00 2001 From: Marius Mauch Date: Wed, 10 Jan 2007 08:08:18 +0000 Subject: Always use vercmp for cpv comparisons svn path=/main/trunk/; revision=5511 --- pym/portage.py | 12 ++++++++++++ pym/portage_dep.py | 7 +++---- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'pym') 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 -- cgit v1.2.3-1-g7c22