diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-12-20 10:48:26 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-12-20 10:48:26 +0000 |
commit | 1190e3997b95de473763f19860ac89ea2c82943e (patch) | |
tree | 5a1688b75c410fec8d80645639054068b38c5a90 | |
parent | 18925649524e46ba27421c062b3365969bcdc8f5 (diff) | |
download | portage-1190e3997b95de473763f19860ac89ea2c82943e.tar.gz portage-1190e3997b95de473763f19860ac89ea2c82943e.tar.bz2 portage-1190e3997b95de473763f19860ac89ea2c82943e.zip |
Make vartree.cpv_all() stop relying on having a categories
list since it may not be available if there is no portage
tree.
svn path=/main/trunk/; revision=8982
-rw-r--r-- | pym/portage/dbapi/vartree.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index ee71bb855..3ced505f7 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -27,7 +27,7 @@ from portage.elog import elog_process from portage.elog.messages import ewarn from portage.elog.filtering import filter_mergephases, filter_unmergephases -import os, sys, stat, errno, commands, copy, time +import os, re, sys, stat, errno, commands, copy, time from itertools import izip try: @@ -165,6 +165,7 @@ class LibraryPackageMap(object): mapfile.close() class vardbapi(dbapi): + _category_re = re.compile(r'^[+\w][-\.+\w]*$') def __init__(self, root, categories=None, settings=None, vartree=None): self.root = root[:] @@ -184,6 +185,12 @@ class vardbapi(dbapi): if categories is None: categories = settings.categories self.categories = categories[:] + # If it seems like the profiles directory is missing, don't + # trust the categories list and try to work without it so + # that we can install binary packages without a profile or + # a portage tree. + if not self.settings.profile_path: + self.categories = None if vartree is None: from portage import db vartree = db[root]["vartree"] @@ -379,7 +386,12 @@ class vardbapi(dbapi): def cpv_all(self, use_cache=1): returnme = [] basepath = os.path.join(self.root, VDB_PATH) + os.path.sep - for x in self.categories: + categories = self.categories + if not categories: + categories = [cat for cat in listdir(basepath, dirsonly=True) \ + if self._category_re.match(cat)] + self.categories = categories + for x in categories: for y in listdir(basepath + x, EmptyOnError=1): if y.startswith("."): continue |