Use Atom for stricter portdb.cp_all() validation.
authorZac Medico <zmedico@gentoo.org>
Sun, 16 Jan 2011 13:30:18 +0000 (05:30 -0800)
committerZac Medico <zmedico@gentoo.org>
Sun, 16 Jan 2011 20:36:37 +0000 (12:36 -0800)
pym/portage/dbapi/__init__.py
pym/portage/dbapi/porttree.py

index 53adfbe74344b67ee50b79665b3787a8a639b4cd..cddf04ab06c5ab0e43a76ee4ea0835c92b25d53a 100644 (file)
@@ -20,7 +20,6 @@ from portage.localization import _
 
 class dbapi(object):
        _category_re = re.compile(r'^\w[-.+\w]*$')
-       _pkg_dir_name_re = re.compile(r'^\w[-+\w]*$')
        _categories = None
        _use_mutable = False
        _known_keys = frozenset(x for x in auxdbkeys
index c72e17812fe9dc08f00948e40c637d29b81390e3..5014d2103639957988133d84b23facbe79e93e4e 100644 (file)
@@ -10,7 +10,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
        'portage.checksum',
        'portage.data:portage_gid,secpass',
        'portage.dbapi.dep_expand:dep_expand',
-       'portage.dep:dep_getkey,match_from_list,use_reduce',
+       'portage.dep:Atom,dep_getkey,match_from_list,use_reduce',
        'portage.env.loaders:KeyValuePairFileLoader',
        'portage.package.ebuild.doebuild:doebuild',
        'portage.util:ensure_dirs,shlex_split,writemsg,writemsg_level',
@@ -768,10 +768,13 @@ class portdbapi(dbapi):
                for x in categories:
                        for oroot in trees:
                                for y in listdir(oroot+"/"+x, EmptyOnError=1, ignorecvs=1, dirsonly=1):
-                                       if not self._pkg_dir_name_re.match(y) or \
-                                               y == "CVS":
+                                       try:
+                                               atom = Atom("%s/%s" % (x, y))
+                                       except InvalidAtom:
+                                               continue
+                                       if atom != atom.cp:
                                                continue
-                                       d[x+"/"+y] = None
+                                       d[atom.cp] = None
                l = list(d)
                l.sort()
                return l