summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Harring <ferringb@chromium.org>2011-10-13 16:26:03 -0700
committerZac Medico <zmedico@gentoo.org>2011-10-13 17:19:26 -0700
commitd4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6 (patch)
treec7e1a577542f7441a5d7591df538b336402b0e90
parentbf28492ed8ccc7fd3679a8e5433101a0945d417d (diff)
downloadportage-d4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6.tar.gz
portage-d4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6.tar.bz2
portage-d4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6.zip
layout.conf: make the pregenerated cache format controllable
Controllable via 'cache-format', currently it supports only one cache; 'pms', and defaults to it. If an unsupported cache-format is specified, the cache is disabled. If pms is specified and metadata/cache directory doesn't exist, the cache is disabled. Finally, this rips out the best module support for locally overriding the cache format used for pregenerated caches; this functionality made zero sense (upstream determines the format, we use what is available).
-rwxr-xr-xbin/egencache4
-rw-r--r--pym/_emerge/actions.py8
-rw-r--r--pym/portage/dbapi/porttree.py10
-rw-r--r--pym/portage/package/ebuild/config.py1
-rw-r--r--pym/portage/repository/config.py19
5 files changed, 24 insertions, 18 deletions
diff --git a/bin/egencache b/bin/egencache
index 7766e786e..26660c1a9 100755
--- a/bin/egencache
+++ b/bin/egencache
@@ -38,6 +38,7 @@ except ImportError:
from portage import os, _encodings, _unicode_encode, _unicode_decode
from _emerge.MetadataRegen import MetadataRegen
from portage.cache.cache_errors import CacheError, StatCollision
+from portage.cache import metadata
from portage.manifest import guessManifestFileType
from portage.util import cmp_sort_key, writemsg_level
from portage import cpv_getkey
@@ -214,8 +215,7 @@ class GenCache(object):
consumer=self._metadata_callback,
max_jobs=max_jobs, max_load=max_load)
self.returncode = os.EX_OK
- metadbmodule = portdb.settings.load_best_module("portdbapi.metadbmodule")
- self._trg_cache = metadbmodule(portdb.porttrees[0],
+ self._trg_cache = metadata.database(portdb.porttrees[0],
"metadata/cache", portage.auxdbkeys[:])
if rsync:
self._trg_cache.raise_stat_collision = True
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 08f70df05..70a92c972 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1660,14 +1660,6 @@ def action_metadata(settings, portdb, myopts, porttrees=None):
porttrees_data = []
for path in porttrees:
src_db = portdb._pregen_auxdb.get(path)
- if src_db is None and \
- os.path.isdir(os.path.join(path, 'metadata', 'cache')):
- src_db = portdb.metadbmodule(
- path, 'metadata/cache', auxdbkeys, readonly=True)
- try:
- src_db.ec = portdb._repo_info[path].eclass_db
- except AttributeError:
- pass
if src_db is not None:
porttrees_data.append(TreeData(portdb.auxdb[path],
diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index ef2e08870..f48741b84 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -120,8 +120,6 @@ class portdbapi(dbapi):
self._have_root_eclass_dir = os.path.isdir(
os.path.join(self.settings.repositories.mainRepoLocation(), "eclass"))
- self.metadbmodule = self.settings.load_best_module("portdbapi.metadbmodule")
-
#if the portdbapi is "frozen", then we assume that we can cache everything (that no updates to it are happening)
self.xcache = {}
self.frozen = 0
@@ -214,10 +212,10 @@ class portdbapi(dbapi):
for x in self.porttrees:
if x in self._pregen_auxdb:
continue
- if os.path.isdir(os.path.join(x, "metadata", "cache")):
- conf = self.repositories.get_repo_for_location(x)
- cache = self._pregen_auxdb[x] = self.metadbmodule(
- x, "metadata/cache", filtered_auxdbkeys, readonly=True)
+ conf = self.repositories.get_repo_for_location(x)
+ cache = conf.get_pregenerated_cache(filtered_auxdbkeys, readonly=True)
+ if cache is not None:
+ self._pregen_auxdb[x] = cache
try:
cache.ec = self._repo_info[x].eclass_db
except AttributeError:
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index 73af0660e..37dcbb4cf 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -311,7 +311,6 @@ class config(object):
if self.modules["user"] is None:
self.modules["user"] = {}
self.modules["default"] = {
- "portdbapi.metadbmodule": "portage.cache.metadata.database",
"portdbapi.auxdbmodule": "portage.cache.flat_hash.database",
}
diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 2490b65da..9a5473820 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -48,7 +48,7 @@ class RepoConfig(object):
'eclass_overrides', 'eclass_locations', 'format', 'location',
'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name',
'name', 'priority', 'sign_manifest', 'sync', 'thin_manifest',
- 'user_location')
+ 'user_location', 'cache_format')
def __init__(self, name, repo_opts):
"""Build a RepoConfig with options in repo_opts
@@ -126,6 +126,16 @@ class RepoConfig(object):
self.create_manifest = True
self.disable_manifest = False
self.manifest_hashes = None
+ self.cache_format = None
+
+ def get_pregenerated_cache(self, auxdbkeys, readonly=True):
+ if self.cache_format is None:
+ return None
+ elif self.cache_format == 'pms':
+ from portage.cache.metadata import database
+ return database(self.location, 'metadata/cache',
+ auxdbkeys, readonly=readonly)
+ return None
def load_manifest(self, *args, **kwds):
kwds['thin'] = self.thin_manifest
@@ -377,6 +387,13 @@ class RepoConfigLoader(object):
repo.create_manifest = manifest_policy != 'false'
repo.disable_manifest = manifest_policy == 'false'
+ # for compatibility w/ PMS, fallback to pms; but also check if the
+ # cache exists or not.
+ repo.cache_format = layout_data.get('cache-format', 'pms').lower()
+ if repo.cache_format == 'pms' and not os.path.isdir(
+ os.path.join(repo.location, 'metadata', 'cache')):
+ repo.cache_format = None
+
manifest_hashes = layout_data.get('manifest-hashes')
if manifest_hashes is not None:
manifest_hashes = frozenset(manifest_hashes.upper().split())