portdbapi: tweak cache permission handling
authorZac Medico <zmedico@gentoo.org>
Thu, 12 May 2011 01:14:54 +0000 (18:14 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 12 May 2011 05:23:07 +0000 (22:23 -0700)
This is a reponse to the following issue:

  http://code.google.com/p/chromium-os/issues/detail?id=15234

pym/portage/dbapi/porttree.py

index 11cc4522505bf905ebab5d71a6f595000cbd1943..231d1fb06f499bf4112e7169b840896e9ed90607 100644 (file)
@@ -18,6 +18,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
        'portage.versions:best,catpkgsplit,_pkgsplit@pkgsplit,ver_regexp',
 )
 
+from portage.cache import metadata_overlay, volatile
 from portage.cache.cache_errors import CacheError
 from portage.cache.mappings import Mapping
 from portage.const import REPO_NAME_LOC
@@ -42,6 +43,7 @@ import codecs
 import logging
 import stat
 import sys
+import traceback
 import warnings
 
 if sys.hexversion >= 0x3000000:
@@ -275,17 +277,14 @@ class portdbapi(dbapi):
                        'perms'   : 0o664
                }
 
-               if secpass < 1:
-                       # portage_gid is irrelevant, so just obey umask
-                       cache_kwargs['gid']   = -1
-                       cache_kwargs['perms'] = -1
-
                # XXX: REMOVE THIS ONCE UNUSED_0 IS YANKED FROM auxdbkeys
                # ~harring
                filtered_auxdbkeys = [x for x in auxdbkeys if not x.startswith("UNUSED_0")]
                filtered_auxdbkeys.sort()
-               from portage.cache import metadata_overlay, volatile
-               if not depcachedir_w_ok:
+               # If secpass < 1, we don't want to write to the cache
+               # since then we won't be able to apply group permissions
+               # to the cache entries/directories.
+               if secpass < 1 or not depcachedir_w_ok:
                        for x in self.porttrees:
                                db_ro = self.auxdbmodule(self.depcachedir, x,
                                        filtered_auxdbkeys, gid=portage_gid, readonly=True)
@@ -465,7 +464,12 @@ class portdbapi(dbapi):
                                metadata[k] = ""
                        metadata["EAPI"] = "-" + eapi.lstrip("-")
 
-               self.auxdb[repo_path][cpv] = metadata
+               try:
+                       self.auxdb[repo_path][cpv] = metadata
+               except CacheError:
+                       # Normally this shouldn't happen, so we'll show
+                       # a traceback for debugging purposes.
+                       traceback.print_exc()
                return metadata
 
        def _pull_valid_cache(self, cpv, ebuild_path, repo_path):