diff options
| -rw-r--r-- | bitbake/lib/bb/cache.py | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index b5be37ea8c..b3c632b81c 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py | |||
| @@ -183,22 +183,34 @@ class Cache(object): | |||
| 183 | newest_mtime = max(old_mtimes) | 183 | newest_mtime = max(old_mtimes) |
| 184 | 184 | ||
| 185 | if bb.parse.cached_mtime_noerror(self.cachefile) >= newest_mtime: | 185 | if bb.parse.cached_mtime_noerror(self.cachefile) >= newest_mtime: |
| 186 | self.load_cachefile() | ||
| 187 | elif os.path.isfile(self.cachefile): | ||
| 188 | logger.info("Out of date cache found, rebuilding...") | ||
| 189 | |||
| 190 | def load_cachefile(self): | ||
| 191 | with open(self.cachefile, "rb") as cachefile: | ||
| 192 | pickled = pickle.Unpickler(cachefile) | ||
| 186 | try: | 193 | try: |
| 187 | p = pickle.Unpickler(file(self.cachefile, "rb")) | 194 | cache_ver = pickled.load() |
| 188 | self.depends_cache, version_data = p.load() | 195 | bitbake_ver = pickled.load() |
| 189 | if version_data['CACHE_VER'] != __cache_version__: | 196 | except Exception: |
| 190 | raise ValueError('Cache Version Mismatch') | 197 | logger.info('Invalid cache, rebuilding...') |
| 191 | if version_data['BITBAKE_VER'] != bb.__version__: | 198 | return |
| 192 | raise ValueError('Bitbake Version Mismatch') | 199 | |
| 193 | except EOFError: | 200 | if cache_ver != __cache_version__: |
| 194 | logger.info("Truncated cache found, rebuilding...") | 201 | logger.info('Cache version mismatch, rebuilding...') |
| 195 | self.depends_cache = {} | 202 | return |
| 196 | except: | 203 | elif bitbake_ver != bb.__version__: |
| 197 | logger.info("Invalid cache found, rebuilding...") | 204 | logger.info('Bitbake version mismatch, rebuilding...') |
| 198 | self.depends_cache = {} | 205 | return |
| 199 | else: | 206 | |
| 200 | if os.path.isfile(self.cachefile): | 207 | while cachefile: |
| 201 | logger.info("Out of date cache found, rebuilding...") | 208 | try: |
| 209 | key = pickled.load() | ||
| 210 | value = pickled.load() | ||
| 211 | except Exception: | ||
| 212 | break | ||
| 213 | self.depends_cache[key] = value | ||
| 202 | 214 | ||
| 203 | @staticmethod | 215 | @staticmethod |
| 204 | def virtualfn2realfn(virtualfn): | 216 | def virtualfn2realfn(virtualfn): |
| @@ -406,14 +418,13 @@ class Cache(object): | |||
| 406 | logger.debug(2, "Cache is clean, not saving.") | 418 | logger.debug(2, "Cache is clean, not saving.") |
| 407 | return | 419 | return |
| 408 | 420 | ||
| 409 | version_data = { | ||
| 410 | 'CACHE_VER': __cache_version__, | ||
| 411 | 'BITBAKE_VER': bb.__version__, | ||
| 412 | } | ||
| 413 | |||
| 414 | with open(self.cachefile, "wb") as cachefile: | 421 | with open(self.cachefile, "wb") as cachefile: |
| 415 | pickle.Pickler(cachefile, -1).dump([self.depends_cache, | 422 | pickler = pickle.Pickler(cachefile, pickle.HIGHEST_PROTOCOL) |
| 416 | version_data]) | 423 | pickler.dump(__cache_version__) |
| 424 | pickler.dump(bb.__version__) | ||
| 425 | for key, value in self.depends_cache.iteritems(): | ||
| 426 | pickler.dump(key) | ||
| 427 | pickler.dump(value) | ||
| 417 | 428 | ||
| 418 | del self.depends_cache | 429 | del self.depends_cache |
| 419 | 430 | ||
