summaryrefslogtreecommitdiffstats
path: root/pym/portage/cache
diff options
context:
space:
mode:
authorBrian Harring <ferringb@chromium.org>2011-10-14 02:40:00 -0700
committerZac Medico <zmedico@gentoo.org>2011-10-14 16:50:20 -0700
commit1e8870bd45a4e2a9c43e7f112701c6ae84b0fd56 (patch)
tree7111ded6176c5a8f4a2b5a39bad04b2f560608ea /pym/portage/cache
parent2ed1cb53cc4158af08c22d466b15b9a9a7767212 (diff)
downloadportage-1e8870bd45a4e2a9c43e7f112701c6ae84b0fd56.tar.gz
portage-1e8870bd45a4e2a9c43e7f112701c6ae84b0fd56.tar.bz2
portage-1e8870bd45a4e2a9c43e7f112701c6ae84b0fd56.zip
layout.conf: add git friendly pregenerated cache format
Enabled via cache-format = md5-dict This format is essentially just flat_hash, using md5 rather than mtime, and dropping the path component from _eclasses_ entries. From a speed standpoint, the md5 overhead is ~16% in comparison to mtime, timed on a modern sandybridge; specifically, validating 29k nodes takes ~8.8s for flat_md5, while the pms norm is ~7.7s. That said, the cache is /usable/ in places PMS is not; in those cases, it can definitely be a win since even if the cache is partially old, it's better than regenerating everything from scratch. (cherry picked from commit 95ddf97e2f7e7d3f6a072604b2df5f77e9298558) Change-Id: Ic3561369b7a8be7f86480f339ab1686fddea6dff
Diffstat (limited to 'pym/portage/cache')
-rw-r--r--pym/portage/cache/flat_hash.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/pym/portage/cache/flat_hash.py b/pym/portage/cache/flat_hash.py
index b6bc0744e..2eae9f634 100644
--- a/pym/portage/cache/flat_hash.py
+++ b/pym/portage/cache/flat_hash.py
@@ -31,7 +31,7 @@ class database(fs_template.FsBased):
self.label.lstrip(os.path.sep).rstrip(os.path.sep))
write_keys = set(self._known_keys)
write_keys.add("_eclasses_")
- write_keys.add("_mtime_")
+ write_keys.add("_%s_" % (self.validation_chf,))
self._write_keys = sorted(write_keys)
if not self.readonly and not os.path.exists(self.location):
self._ensure_dirs()
@@ -69,7 +69,6 @@ class database(fs_template.FsBased):
raise cache_errors.CacheCorruption(cpv, e)
def _setitem(self, cpv, values):
-# import pdb;pdb.set_trace()
s = cpv.rfind("/")
fp = os.path.join(self.location,cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:]))
try:
@@ -153,3 +152,9 @@ class database(fs_template.FsBased):
dirs.append((depth+1, p))
continue
yield p[len_base+1:]
+
+
+class md5_database(database):
+
+ validation_chf = 'md5'
+ store_eclass_paths = False