From 15ec54ba9615feadbc2b6bb1d32df16a826c6159 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 11 May 2011 18:14:54 -0700 Subject: portdbapi: tweak cache permission handling This is a reponse to the following issue: http://code.google.com/p/chromium-os/issues/detail?id=15234 --- pym/portage/dbapi/porttree.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py index cd74d21df..379cc68cd 100644 --- a/pym/portage/dbapi/porttree.py +++ b/pym/portage/dbapi/porttree.py @@ -17,6 +17,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.dbapi import dbapi @@ -40,6 +41,7 @@ import codecs import logging import stat import sys +import traceback import warnings if sys.hexversion >= 0x3000000: @@ -159,17 +161,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) @@ -370,7 +369,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): -- cgit v1.2.3-1-g7c22