When transferring cache after sync, compare all metadata to make sure it is identical...
authorZac Medico <zmedico@gentoo.org>
Sat, 4 Nov 2006 01:55:32 +0000 (01:55 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 4 Nov 2006 01:55:32 +0000 (01:55 -0000)
svn path=/main/trunk/; revision=4924

pym/cache/util.py

index f2f62991c17b694523e67701ff6c279d2a71bf63..5dd9970b9466a3767ee9173103763ebb84131f29 100644 (file)
@@ -3,6 +3,9 @@
 # License: GPL2
 # $Id$
 
+if not hasattr(__builtins__, "set"):
+       from sets import Set as set
+from itertools import chain
 from cache import cache_errors
 
 def mirror_cache(valid_nodes_iterable, src_cache, trg_cache, eclass_cache=None, verbose_instance=None):
@@ -40,6 +43,19 @@ def mirror_cache(valid_nodes_iterable, src_cache, trg_cache, eclass_cache=None,
                except (cache_errors.CacheError, KeyError):
                        pass
 
+               if not write_it:
+                       """ We don't want to skip the write unless we're really sure that
+                       the existing cache is identical, so don't trust _mtime_ and
+                       _eclasses_ alone."""
+                       for d in (entry, trg):
+                               if "EAPI" in d and d["EAPI"] in ("", "0"):
+                                       del d["EAPI"]
+                       for k in set(chain(entry, trg)).difference(
+                               ("_mtime_", "_eclasses_")):
+                               if trg.get(k, "") != entry.get(k, ""):
+                                       write_it = True
+                                       break
+
                if write_it:
                        try:
                                inherited = entry.get("INHERITED", None)