summaryrefslogtreecommitdiffstats
path: root/pym/portage/repository/config.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-10-25 15:52:59 -0700
committerZac Medico <zmedico@gentoo.org>2011-10-25 15:52:59 -0700
commit2843806fad6d0aa07ad4ce97290ebe1d03b00104 (patch)
treec0baeda8d5182b25504f602440c1e22d134cdc27 /pym/portage/repository/config.py
parente544ee13527a0568de2b556510280ed96fc1b3ff (diff)
downloadportage-2843806fad6d0aa07ad4ce97290ebe1d03b00104.tar.gz
portage-2843806fad6d0aa07ad4ce97290ebe1d03b00104.tar.bz2
portage-2843806fad6d0aa07ad4ce97290ebe1d03b00104.zip
layout.conf: rename cache_format to cache_formats
We read layout.conf cache-formats from left to right and use the first supported type that's found. This will allow support for multiple formats in parallel, providing for smooth transitions between formats.
Diffstat (limited to 'pym/portage/repository/config.py')
-rw-r--r--pym/portage/repository/config.py44
1 files changed, 28 insertions, 16 deletions
diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py
index 377ba4733..9b4a76f59 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -44,7 +44,7 @@ class RepoConfig(object):
"""Stores config of one repository"""
__slots__ = ('aliases', 'allow_missing_manifest',
- 'cache_format', 'create_manifest', 'disable_manifest',
+ 'cache_formats', 'create_manifest', 'disable_manifest',
'eclass_overrides', 'eclass_locations', 'format', 'location',
'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name',
'name', 'priority', 'sign_manifest', 'sync', 'thin_manifest',
@@ -128,22 +128,32 @@ class RepoConfig(object):
self.disable_manifest = False
self.manifest_hashes = None
self.update_changelog = False
- self.cache_format = None
+ self.cache_formats = None
self.portage1_profiles = True
self.portage1_profiles_compat = False
def get_pregenerated_cache(self, auxdbkeys, readonly=True, force=False):
- format = self.cache_format
- if format is None:
+ """
+ Reads layout.conf cache-formats from left to right and returns a
+ cache instance for the first supported type that's found. If no
+ cache-formats are specified in layout.conf, 'pms' type is assumed
+ if the metadata/cache directory exists or force is True.
+ """
+ formats = self.cache_formats
+ if not formats:
if not force:
return None
- format = 'pms'
- if format == 'pms':
- from portage.cache.metadata import database
- name = 'metadata/cache'
- elif format == 'md5-dict':
- from portage.cache.flat_hash import md5_database as database
- name = 'metadata/md5-cache'
+ formats = ('pms',)
+
+ for fmt in formats:
+ if fmt == 'pms':
+ from portage.cache.metadata import database
+ name = 'metadata/cache'
+ break
+ elif fmt == 'md5-dict':
+ from portage.cache.flat_hash import md5_database as database
+ name = 'metadata/md5-cache'
+ break
else:
return None
return database(self.location, name,
@@ -379,7 +389,7 @@ class RepoConfigLoader(object):
repo.aliases = tuple(aliases) + layout_data['aliases']
for value in ('sign-manifest', 'thin-manifest', 'allow-missing-manifest',
- 'create-manifest', 'disable-manifest', 'cache-format', 'manifest-hashes',
+ 'create-manifest', 'disable-manifest', 'cache-formats', 'manifest-hashes',
'update-changelog'):
setattr(repo, value.lower().replace("-", "_"), layout_data[value])
@@ -387,6 +397,8 @@ class RepoConfigLoader(object):
for x in layout_data['profile-formats'])
repo.portage1_profiles_compat = layout_data['profile-formats'] == ('portage-1-compat',)
+ repo.cache_formats = layout_data['cache-formats']
+
#Take aliases into account.
new_prepos = {}
for repo_name, repo in prepos.items():
@@ -608,11 +620,11 @@ def parse_layout_conf(repo_location, repo_name=None):
# for compatibility w/ PMS, fallback to pms; but also check if the
# cache exists or not.
- cache_format = layout_data.get('cache-format', 'pms').lower()
- if cache_format == 'pms' and not os.path.isdir(
+ cache_formats = layout_data.get('cache-formats', 'pms').lower().split()
+ if 'pms' in cache_formats and not os.path.isdir(
os.path.join(repo_location, 'metadata', 'cache')):
- cache_format = None
- data['cache-format'] = cache_format
+ cache_formats.remove('pms')
+ data['cache-formats'] = tuple(cache_formats)
manifest_hashes = layout_data.get('manifest-hashes')
if manifest_hashes is not None: