From d4ea29bf6a3ce35d49e0f54f9173e3a6e42da2d6 Mon Sep 17 00:00:00 2001 From: Brian Harring Date: Thu, 13 Oct 2011 16:26:03 -0700 Subject: 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). --- pym/_emerge/actions.py | 8 -------- pym/portage/dbapi/porttree.py | 10 ++++------ pym/portage/package/ebuild/config.py | 1 - pym/portage/repository/config.py | 19 ++++++++++++++++++- 4 files changed, 22 insertions(+), 16 deletions(-) (limited to 'pym') 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()) -- cgit v1.2.3-1-g7c22