diff options
author | Brian Harring <ferringb@gentoo.org> | 2006-01-05 05:33:25 +0000 |
---|---|---|
committer | Brian Harring <ferringb@gentoo.org> | 2006-01-05 05:33:25 +0000 |
commit | b914e83041ec8f57f24ea199a7b8caf07cd5111f (patch) | |
tree | a07772598fad10ab4055242fc7dbe752971d62c9 | |
parent | a49c023410104aecbd8e138e9cc7826f8f19bf24 (diff) | |
download | portage-b914e83041ec8f57f24ea199a7b8caf07cd5111f.tar.gz portage-b914e83041ec8f57f24ea199a7b8caf07cd5111f.tar.bz2 portage-b914e83041ec8f57f24ea199a7b8caf07cd5111f.zip |
'k. reverted use_reduce filtering of empty lists (was resulting in ["||"] as elements, which are invalid), added
a recursive filter of empty sets/resolved || and && nodes; in the process, keeps portage from using an empty bool as a satisfier in
|| () restriction sets.
svn path=/main/trunk/; revision=2528
-rw-r--r-- | pym/portage.py | 20 | ||||
-rw-r--r-- | pym/portage_dep.py | 8 |
2 files changed, 22 insertions, 6 deletions
diff --git a/pym/portage.py b/pym/portage.py index 186555700..6105e0810 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -3374,6 +3374,26 @@ def dep_check(depstring,mydbapi,mysettings,use="yes",mode=None,myuse=None,use_ca #if mysplit==None, then we have a parse error (paren mismatch or misplaced ||) #up until here, we haven't needed to look at the database tree + # recursive cleansing of empty arrays. + # without this, portage eats itself if fed a || () + def f(a): + x = 0 + l = len(a) + while x < l: + if isinstance(a[x], list): + l2 = len(a[x]) + if l2 == 0: + a.pop(x) + elif l2 == 1 and a[x][0] in ("||", "&&"): + a.pop(x) + else: + f(a[x]) + x+=1 + continue + l-=1 + x+=1 + f(mysplit) + if mysplit==None: return [0,"Parse Error (parentheses mismatch?)"] elif mysplit==[]: diff --git a/pym/portage_dep.py b/pym/portage_dep.py index 5467e0055..de5c504cc 100644 --- a/pym/portage_dep.py +++ b/pym/portage_dep.py @@ -79,9 +79,7 @@ def use_reduce(deparray, uselist=[], masklist=[], matchall=0, excludeall=[]): head = mydeparray.pop(0) if type(head) == types.ListType: - additions = use_reduce(head, uselist, masklist, matchall, excludeall) - if additions: - rlist.append(additions) + rlist.append(use_reduce(head, uselist, masklist, matchall, excludeall)) else: if head[-1] == "?": # Use reduce next group on fail. @@ -124,9 +122,7 @@ def use_reduce(deparray, uselist=[], masklist=[], matchall=0, excludeall=[]): if ismatch: target = newdeparray[-1] if isinstance(target, list): - additions = use_reduce(target, uselist, masklist, matchall, excludeall) - if additions: - rlist.append(additions) + rlist.append(use_reduce(target, uselist, masklist, matchall, excludeall)) else: rlist += [target] |