if updates:
mydb.aux_update(mycpv, updates)
-def cpv_sort_descending(cpv_list):
- """Sort in place, returns None."""
- if len(cpv_list) <= 1:
- return
- first_split = portage.catpkgsplit(cpv_list[0])
- cat = first_split[0]
- cpv_list[0] = first_split[1:]
- for i in xrange(1, len(cpv_list)):
- cpv_list[i] = portage.catpkgsplit(cpv_list[i])[1:]
- cpv_list.sort(portage.pkgcmp, reverse=True)
- for i, (pn, ver, rev) in enumerate(cpv_list):
- if rev == "r0":
- cpv = cat + "/" + pn + "-" + ver
- else:
- cpv = cat + "/" + pn + "-" + ver + "-" + rev
- cpv_list[i] = cpv
-
def visible(pkgsettings, cpv, metadata, built=False, installed=False):
"""
Check if a package is visible. This can raise an InvalidDependString
# we have to try all of them to prevent the old-style
# virtuals from overriding available new-styles.
continue
- cpv_sort_descending(cpv_list)
+ # descending order
+ cpv_list.reverse()
for cpv in cpv_list:
if filtered_db.cpv_exists(cpv):
continue
cpv_list = db.xmatch("match-all", atom)
else:
cpv_list = db.match(atom)
- cpv_sort_descending(cpv_list)
+ # descending order
+ cpv_list.reverse()
for cpv in cpv_list:
try:
metadata = dict(izip(db_keys,
cpv_list = db.xmatch("match-all", atom)
else:
cpv_list = db.match(atom)
- cpv_sort_descending(cpv_list)
+ # descending order
+ cpv_list.reverse()
for cpv in cpv_list:
reinstall_for_flags = None
try:
from portage.output import red
from portage.util import writemsg
from portage import dep_expand
-from portage.versions import catsplit
+from portage.versions import catpkgsplit, catsplit, pkgcmp
class dbapi(object):
def cp_list(self, cp, use_cache=1):
return
+ def _cpv_sort_ascending(self, cpv_list):
+ """
+ Use this to sort self.cp_list() results in ascending
+ order. It sorts in place and returns None.
+ """
+ if len(cpv_list) > 1:
+ first_split = catpkgsplit(cpv_list[0])
+ cat = first_split[0]
+ cpv_list[0] = first_split[1:]
+ for i in xrange(1, len(cpv_list)):
+ cpv_list[i] = catpkgsplit(cpv_list[i])[1:]
+ cpv_list.sort(pkgcmp)
+ for i, (pn, ver, rev) in enumerate(cpv_list):
+ if rev == "r0":
+ cpv = cat + "/" + pn + "-" + ver
+ else:
+ cpv = cat + "/" + pn + "-" + ver + "-" + rev
+ cpv_list[i] = cpv
+
def cpv_all(self):
"""Return all CPVs in the db
Args:
mylist = d.keys()
# Always sort in ascending order here since it's handy
# and the result can be easily cached and reused.
- if len(mylist) > 1:
- for i in xrange(len(mylist)):
- mylist[i] = catpkgsplit(mylist[i])[1:]
- mylist.sort(pkgcmp)
- cat = mysplit[0]
- for i, (pn, ver, rev) in enumerate(mylist):
- if rev == "r0":
- cpv = cat + "/" + pn + "-" + ver
- else:
- cpv = cat + "/" + pn + "-" + ver + "-" + rev
- mylist[i] = cpv
+ self._cpv_sort_ascending(mylist)
if self.frozen and mytree is None:
cachelist = mylist[:]
self.xcache["cp-list"][mycp] = cachelist
if use_cache and self.cpcache.has_key(mycp):
cpc = self.cpcache[mycp]
if cpc[0] == mystat:
- return cpc[1]
+ return cpc[1][:]
cat_dir = self.getpath(mysplit[0])
try:
dir_list = os.listdir(cat_dir)
if ps[0] == mysplit[1]:
returnme.append(mysplit[0]+"/"+x)
if use_cache:
- self.cpcache[mycp] = [mystat,returnme]
+ self._cpv_sort_ascending(returnme)
+ self.cpcache[mycp] = [mystat, returnme[:]]
elif self.cpcache.has_key(mycp):
del self.cpcache[mycp]
return returnme
return self.cpvdict.has_key(mycpv)
def cp_list(self, mycp, use_cache=1):
- if not self.cpdict.has_key(mycp):
- return []
- else:
- return self.cpdict[mycp]
+ cachelist = self._match_cache.get(mycp)
+ # cp_list() doesn't expand old-style virtuals
+ if cachelist and cachelist[0].startswith(mycp):
+ return cachelist[:]
+ cpv_list = self.cpdict.get(mycp)
+ if cpv_list is None:
+ cpv_list = []
+ self._cpv_sort_ascending(cpv_list)
+ if not (not cpv_list and mycp.startswith("virtual/")):
+ self._match_cache[mycp] = cpv_list[:]
+ return cpv_list
def cp_all(self):
return list(self.cpdict)