summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-12-20 14:29:17 +0000
committerZac Medico <zmedico@gentoo.org>2007-12-20 14:29:17 +0000
commit0d0b4a1ec60691a7478b4e8e17819ac54a8586ae (patch)
tree98e84747dada7320b7b52071a763c64680b0cbfa /pym
parent951e5ebb919ec07adb0ac8c9a000cbdf9048eb48 (diff)
downloadportage-0d0b4a1ec60691a7478b4e8e17819ac54a8586ae.tar.gz
portage-0d0b4a1ec60691a7478b4e8e17819ac54a8586ae.tar.bz2
portage-0d0b4a1ec60691a7478b4e8e17819ac54a8586ae.zip
For simplicity and consistency, always use a regular expression
for category validation instead of using a list. (trunk r8991:8993) svn path=/main/branches/2.1.2/; revision=8994
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py30
1 files changed, 14 insertions, 16 deletions
diff --git a/pym/portage.py b/pym/portage.py
index c9dfe0d77..571766c9f 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -6091,15 +6091,9 @@ class vardbapi(dbapi):
if settings is None:
settings = globals()["settings"]
self.settings = settings
- 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
+ # The categories list is now automatically generated
+ # from a regular expression.
+ self.categories = None
if vartree is None:
vartree = globals()["db"][root]["vartree"]
self.vartree = vartree
@@ -6284,7 +6278,9 @@ class vardbapi(dbapi):
categories = [cat for cat in listdir(basepath, dirsonly=True) \
if self._category_re.match(cat)]
self.categories = categories
- for x in categories:
+ for x in listdir(basepath, EmptyOnError=1, ignorecvs=1, dirsonly=1):
+ if not self._category_re.match(x):
+ continue
for y in listdir(basepath+x,EmptyOnError=1):
if y.startswith("."):
continue
@@ -6712,7 +6708,8 @@ def close_portdbapi_caches():
class portdbapi(dbapi):
"""this tree will scan a portage directory located at root (passed to init)"""
portdbapi_instances = []
-
+ _non_category_dirs = re.compile(r'(%s)^$' % \
+ "|".join(["eclass", "profiles", "scripts"]))
def __init__(self,porttree_root,mysettings=None):
portdbapi.portdbapi_instances.append(self)
@@ -7164,7 +7161,11 @@ class portdbapi(dbapi):
def cp_all(self):
"returns a list of all keys in our tree"
d={}
- for x in self.mysettings.categories:
+ for oroot in self.porttrees:
+ for x in listdir(oroot, EmptyOnError=1, ignorecvs=1, dirsonly=1):
+ if not self._category_re.match(x) or \
+ self._non_category_dirs.match(x):
+ continue
for oroot in self.porttrees:
for y in listdir(oroot+"/"+x,EmptyOnError=1,ignorecvs=1,dirsonly=1):
d[x+"/"+y] = None
@@ -7192,10 +7193,7 @@ class portdbapi(dbapi):
self.xcache["match-all"][mycp] = cachelist
return cachelist[:]
mysplit = mycp.split("/")
- if self.mysettings.profile_path:
- invalid_category = mysplit[0] not in self._categories
- else:
- invalid_category = not self._category_re.match(mysplit[0])
+ invalid_category = not self._category_re.match(mysplit[0])
d={}
if mytree:
mytrees = [mytree]