Index: bin/emerge =================================================================== --- bin/emerge (revision 3908) +++ bin/emerge (working copy) @@ -3193,7 +3193,7 @@ vartree = trees[settings["ROOT"]]["vartree"] syslist = getlist(settings, "system") worldlist = getlist(settings, "world") - myvarlist = vartree.dbapi.cp_all() + myvarlist = vartree.dbapi.cpv_all() if not syslist: print "\n!!! You have no system list.", @@ -3235,6 +3235,7 @@ sys.exit(1) reallist=[] + explicitly_required = set() for x in alldeps: myparts=portage.catpkgsplit(string.split(x)[2]) if not myparts: @@ -3251,12 +3252,16 @@ catpack=myparts[0]+"/"+myparts[1] if catpack not in reallist: reallist.append(catpack) + explicitly_required.add(x.split()[2]) cleanlist=[] + clean_unversioned = [] for x in myvarlist: - if x not in reallist: + if x not in explicitly_required: if x not in cleanlist: cleanlist.append(x) + myparts = portage.catpkgsplit(x.split()[2]) + clean_unversioned.append(myparts[0] + "/" + myparts[1]) for x in syslist+worldlist: myparts = portage.catpkgsplit(x) @@ -3268,8 +3273,10 @@ catpack=myparts[0]+"/"+myparts[1] else: catpack=x - if catpack in cleanlist: - cleanlist.remove(catpack) + while catpack in clean_unversioned: + idx = clean_unversioned.index(catpack) + del cleanlist[idx] + del clean_unversioned[idx] #print "\n\n\nCleaning: " #for x in cleanlist: