Bug #220171 - Filter out 'lost+found' directories in vardbapi.cpv_all()
authorZac Medico <zmedico@gentoo.org>
Mon, 5 May 2008 04:50:23 +0000 (04:50 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 5 May 2008 04:50:23 +0000 (04:50 -0000)
in order to avoid fatal 'Permission denied' errors. Currently, CVS and
names beginning with '.' are also filtered. (trunk r10192)

svn path=/main/branches/2.1.2/; revision=10193

pym/portage.py

index d7f4bbbd524e913094e1108ea4554bc75b751a95..462363c9104049213c54adbcd6d380a2b52dcd7f 100644 (file)
@@ -6512,6 +6512,12 @@ class bindbapi(fakedbapi):
                return fakedbapi.cpv_all(self)
 
 class vardbapi(dbapi):
+
+       _excluded_dirs = ["CVS", "lost+found"]
+       _excluded_dirs = [re.escape(x) for x in _excluded_dirs]
+       _excluded_dirs = re.compile(r'^(\..*|' + \
+               "|".join(_excluded_dirs) + r')$')
+
        """
        The categories parameter is unused since the dbapi class
        now has a categories property that is generated from the
@@ -6711,10 +6717,12 @@ class vardbapi(dbapi):
                returnme = []
                basepath = os.path.join(self.root, VDB_PATH) + os.path.sep
                for x in listdir(basepath, EmptyOnError=1, ignorecvs=1, dirsonly=1):
+                       if self._excluded_dirs.match(x) is not None:
+                               continue
                        if not self._category_re.match(x):
                                continue
                        for y in listdir(basepath+x,EmptyOnError=1):
-                               if y.startswith("."):
+                               if self._excluded_dirs.match(y) is not None:
                                        continue
                                subpath = x+"/"+y
                                # -MERGING- should never be a cpv, nor should files.