From 66e33621c11d633b456b287c9512bd1f1166a5d3 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 5 Oct 2006 11:52:50 +0000 Subject: Improve best_match_to_list() and include support for slot deps. svn path=/main/trunk/; revision=4598 --- pym/portage_dep.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/pym/portage_dep.py b/pym/portage_dep.py index af4a72501..932c3e3c4 100644 --- a/pym/portage_dep.py +++ b/pym/portage_dep.py @@ -273,15 +273,31 @@ def match_to_list(mypkg, mylist): def best_match_to_list(mypkg, mylist): """(pkgname, list) - Returns the most specific entry (assumed to be the longest one) - that matches the package given. + Returns the most specific entry that matches the package given. + Type Value + =cpv 6 + ~cpv 5 + =cpv* 4 + cp:slot 3 + >cpv 2 + =cpv 2 + <=cpv 2 + cp 1 """ - # XXX Assumption is wrong sometimes. - maxlen = 0 + operator_values = {'=':6, '~':5, '=*':4, + '>':2, '<':2, '>=':2, '<=':2, None:1} + maxvalue = 0 bestm = None for x in match_to_list(mypkg, mylist): - if len(x) > maxlen: - maxlen = len(x) + if dep_getslot(x) is not None: + if maxvalue < 3: + maxvalue = 3 + bestm = x + continue + op_val = operator_values[get_operator(x)] + if op_val > maxvalue: + maxvalue = op_val bestm = x return bestm -- cgit v1.2.3-1-g7c22