Detect md5-cache when no cache-formats specified.
authorZac Medico <zmedico@gentoo.org>
Sat, 8 Sep 2012 04:32:03 +0000 (21:32 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 8 Sep 2012 04:32:03 +0000 (21:32 -0700)
Auto-detect cache-formats from the corresponding directories when
cache-formats is not specifed in layout.conf, and prefer md5-dict if
available. After this behavior is deployed in stable portage, the
default egencache format can be changed to md5-dict.

pym/portage/repository/config.py
pym/portage/tests/dbapi/test_portdb_cache.py

index 9b43f387284569e637a50943c79831155b287d49..4de49f0ceebff673179b014abd4b4f2bdd15985e 100644 (file)
@@ -713,9 +713,15 @@ 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_formats = layout_data.get('cache-formats', '').lower().split()
-       if not cache_formats and os.path.isdir(
-               os.path.join(repo_location, 'metadata', 'cache')):
-               cache_formats = ['pms']
+       if not cache_formats:
+               # Auto-detect cache formats, and prefer md5-cache if available.
+               # After this behavior is deployed in stable portage, the default
+               # egencache format can be changed to md5-dict.
+               cache_formats = []
+               if os.path.isdir(os.path.join(repo_location, 'metadata', 'md5-cache')):
+                       cache_formats.append('md5-dict')
+               if os.path.isdir(os.path.join(repo_location, 'metadata', 'cache')):
+                       cache_formats.append('pms')
        data['cache-formats'] = tuple(cache_formats)
 
        manifest_hashes = layout_data.get('manifest-hashes')
index e6d2ba7c90323c692f17edeef4c868e0ef894cbd..4a0129b3ef2351910abd500321b1e10e44d69bed 100644 (file)
@@ -96,6 +96,21 @@ class PortdbCacheTestCase(TestCase):
                                if not isinstance(portage.portdb._pregen_auxdb[portage.portdb.porttree_root], pms_database):
                                        sys.exit(1)
                        """),),
+
+                       # Test auto-detection and preference for md5-cache when both
+                       # cache formats are available but layout.conf is absent.
+                       (BASH_BINARY, "-c", "rm %s" % portage._shell_quote(layout_conf_path)),
+                       python_cmd + (textwrap.dedent("""
+                               import os, sys, portage
+                               if portage.portdb.porttree_root not in portage.portdb._pregen_auxdb:
+                                       sys.exit(1)
+                       """),),
+                       python_cmd + (textwrap.dedent("""
+                               import os, sys, portage
+                               from portage.cache.flat_hash import md5_database
+                               if not isinstance(portage.portdb._pregen_auxdb[portage.portdb.porttree_root], md5_database):
+                                       sys.exit(1)
+                       """),),
                )
 
                features = []