]> code.ossystems Code Review - openembedded-core.git/commitdiff
cache: change to more incremental format
authorChris Larson <chris_larson@mentor.com>
Mon, 29 Nov 2010 15:50:19 +0000 (08:50 -0700)
committerRichard Purdie <rpurdie@linux.intel.com>
Tue, 4 Jan 2011 14:46:45 +0000 (14:46 +0000)
(Bitbake rev: 4fe4ffbef3885887c97eebe021edc3f23feab9ea)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/cache.py

index b5be37ea8c70162e44ed26c634d34adfeeced943..b3c632b81cefd2ea77f7b1cd0fcefafb69ef854e 100644 (file)
@@ -183,22 +183,34 @@ class Cache(object):
         newest_mtime = max(old_mtimes)
 
         if bb.parse.cached_mtime_noerror(self.cachefile) >= newest_mtime:
+            self.load_cachefile()
+        elif os.path.isfile(self.cachefile):
+            logger.info("Out of date cache found, rebuilding...")
+
+    def load_cachefile(self):
+        with open(self.cachefile, "rb") as cachefile:
+            pickled = pickle.Unpickler(cachefile)
             try:
-                p = pickle.Unpickler(file(self.cachefile, "rb"))
-                self.depends_cache, version_data = p.load()
-                if version_data['CACHE_VER'] != __cache_version__:
-                    raise ValueError('Cache Version Mismatch')
-                if version_data['BITBAKE_VER'] != bb.__version__:
-                    raise ValueError('Bitbake Version Mismatch')
-            except EOFError:
-                logger.info("Truncated cache found, rebuilding...")
-                self.depends_cache = {}
-            except:
-                logger.info("Invalid cache found, rebuilding...")
-                self.depends_cache = {}
-        else:
-            if os.path.isfile(self.cachefile):
-                logger.info("Out of date cache found, rebuilding...")
+                cache_ver = pickled.load()
+                bitbake_ver = pickled.load()
+            except Exception:
+                logger.info('Invalid cache, rebuilding...')
+                return
+
+            if cache_ver != __cache_version__:
+                logger.info('Cache version mismatch, rebuilding...')
+                return
+            elif bitbake_ver != bb.__version__:
+                logger.info('Bitbake version mismatch, rebuilding...')
+                return
+
+            while cachefile:
+                try:
+                    key = pickled.load()
+                    value = pickled.load()
+                except Exception:
+                    break
+                self.depends_cache[key] = value
 
     @staticmethod
     def virtualfn2realfn(virtualfn):
@@ -406,14 +418,13 @@ class Cache(object):
             logger.debug(2, "Cache is clean, not saving.")
             return
 
-        version_data = {
-            'CACHE_VER': __cache_version__,
-            'BITBAKE_VER': bb.__version__,
-        }
-
         with open(self.cachefile, "wb") as cachefile:
-            pickle.Pickler(cachefile, -1).dump([self.depends_cache,
-                                                version_data])
+            pickler = pickle.Pickler(cachefile, pickle.HIGHEST_PROTOCOL)
+            pickler.dump(__cache_version__)
+            pickler.dump(bb.__version__)
+            for key, value in self.depends_cache.iteritems():
+                pickler.dump(key)
+                pickler.dump(value)
 
         del self.depends_cache