From 159aee22dc7d8c78ca2920dfc58d8bf9238ef720 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 6 Jul 2011 17:54:49 +0100 Subject: cache.py: Ensure additional .bbappend files are accounted for Currently if a user adds a new .bbappend file to the system, the cache still thinks the cached data is valid. This code fixes that to ensure additions and changed in append application order are accounted for. [YOCTO #1091] (Bitbake rev: 54fe91fe96aaae47c40077c5f441c79da71da777) Signed-off-by: Richard Purdie --- bitbake/lib/bb/cache.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'bitbake/lib/bb/cache.py') diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 99d7395f86..6e152fa0c9 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py @@ -43,7 +43,7 @@ except ImportError: logger.info("Importing cPickle failed. " "Falling back to a very slow implementation.") -__cache_version__ = "140" +__cache_version__ = "141" def getCacheFile(path, filename): return os.path.join(path, filename) @@ -94,6 +94,7 @@ class CoreRecipeInfo(RecipeInfoCommon): self.file_depends = metadata.getVar('__depends', False) self.timestamp = bb.parse.cached_mtime(filename) self.variants = self.listvar('__VARIANTS', metadata) + [''] + self.appends = self.listvar('__BBAPPEND', metadata) self.nocache = self.getvar('__BB_DONT_CACHE', metadata) self.skipreason = self.getvar('__SKIPPED', metadata) @@ -429,7 +430,7 @@ class Cache(object): automatically add the information to the cache or to your CacheData. Use the add or add_info method to do so after running this, or use loadData instead.""" - cached = self.cacheValid(filename) + cached = self.cacheValid(filename, appends) if cached: infos = [] # info_array item is a list of [CoreRecipeInfo, XXXRecipeInfo] @@ -460,13 +461,13 @@ class Cache(object): return cached, skipped, virtuals - def cacheValid(self, fn): + def cacheValid(self, fn, appends): """ Is the cache valid for fn? Fast version, no timestamps checked. """ if fn not in self.checked: - self.cacheValidUpdate(fn) + self.cacheValidUpdate(fn, appends) # Is cache enabled? if not self.has_cache: @@ -475,7 +476,7 @@ class Cache(object): return True return False - def cacheValidUpdate(self, fn): + def cacheValidUpdate(self, fn, appends): """ Is the cache valid for fn? Make thorough (slower) checks including timestamps. @@ -524,6 +525,12 @@ class Cache(object): self.remove(fn) return False + if appends != info_array[0].appends: + logger.debug(2, "Cache: appends for %s changed", fn) + bb.note("%s to %s" % (str(appends), str(info_array[0].appends))) + self.remove(fn) + return False + invalid = False for cls in info_array[0].variants: virtualfn = self.realfn2virtual(fn, cls) -- cgit v1.2.3-54-g00ecf